hibernate仅沿着定义的关联进行级联。如果A对B不了解,那么您对A所做的任何事情都不会影响B。
因此,Pascal的建议是您要做的最简单的方法:
<class name="A" table="tbl_A"> ... <set name="myBs" inverse="true" cascade="all,delete-orphan"> <key column="col1"/> <one-to-many /> </set></class><class name="B" table="tbl_B"> ... <many-to-one name="a" column="col1" not-null="true"/></class>
请注意,在原始代码中
cascade="delete"按
B原样设置on 并不会执行您想要的 *** 作-
它告诉Hibernate“如果B被删除,则删除A”,这很可能导致约束冲突(如果还有其他B链接到该A )。
如果您绝对不能向A添加B的集合(尽管我真的不认为会是这种情况),您唯一的另一种选择是在外键级别上定义从A到B的级联删除。然后,当您删除A时,您的B将被删除。
但是,这是一个非常丑陋的解决方案,因为您必须非常小心在Hibernate中删除A的方式:
- 必须先刷新会话,然后才能删除A(对B的待定更新可能会导致错误,或者A和某些B在后台重新插入)
- 必须从所有活动会话和第二级缓存中逐出与您的A链接的所有B(并且由于您未从A端维护关系,这意味着 所有 B)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)