我有一个简单的电子商务Grails 5应用程序,在其中我将CartItem定义为:
class CartItem {
Customer customer
Product product
Integer quantity}
我的产品类别:
class Product {
String name
Double price }
删除产品时,必须同时删除包含此产品的cartItem(如果有)。(这同样适用于客户)。现在,当我删除产品时,如果此产品包含cartItem,则会出现完整性违规异常。
我正在使用Hibernate和H2内存数据库。如果不使用Hibernate配置(除非这是唯一的方法),我如何使用grails GORM实现产品删除级联到关联cartItem删除行为的自动删除?
当客户将产品添加到购物车时,将创建CartItem的示例。
当cartItem被删除时(当产品从购物车中删除时),相关的产品或客户不会发生任何变化。但是当产品被删除时,其关联的cartItem也必须被删除。
2条答案
按热度按时间rks48beu1#
CartItem不属于Product,因此在删除Product时Grails无法删除它,但是可以利用Grails域类事件-“beforeDelete”。
https://docs.grails.org/3.0.x/guide/GORM.html#eventsAutoTimestamping
eqfvzcg82#
您不能删除此配置中的产品。这是Grails文档。
https://docs.grails.org/5.0.0-RC4/ref/Database%20Mapping/cascade.html
该文档显示了带有hasMany引用的示例。
在我看来,您还需要在CartItem类中包含hasMany,这样才能运行,请查看Grails文档中的示例。
您可以尝试将此行添加到CartItem类中,以查看是否存在任何错误,说明无法找到产品参考。
我以前没有试过,所以我不能直接给予你。
如果这不起作用,你将不得不滚动你自己的。你也可以从数据库中修改FK索引以启用级联删除。确保你记录你所做的。否则下一个拿起项目的家伙会抱怨。