Collection.clear()都会删除子项。
OneToOne怎么样?设置为null不是正确的方法。没有针对OneToOne的clear()方法。
Table_A有一个列(不是它的PK!)OneToOne引用Table_B。
我想知道Hib在我的案例中是否按预期工作?
我的级联选项设置为“all,delete-orphan”。
Table_A @OneToOne Table_B
Table_B @OneToMany Table_C
现在它看起来像Table_A。 getTable_B。 getTable_C_Collection()
假设Table_C集合中有元素。
我对Hibernate的期望:如果我将Table_B链接设置为null,那么
必须删除所有Table_C集合元素。
没有发生。他们变得孤立!
答案 0 :(得分:2)
您是否尝试过“all-delete-orphan”而不是“all,delete-orphan”?这两个应该是相同的,但过去有一个问题,一个人有不同的行为。这些问题实际上是错误,所以如果使用一个而不是另一个确实表现不同,请务必open a bug。
您可能还想在Hibernate映射中设置inverse='true'
。从documentation和this Stack Overflow Question开始,看起来inverse = true通常是让级联删除正常工作的关键。
答案 1 :(得分:1)
不,如果您已启用级联,则删除父级将删除子级。
您需要将DELETE SQL发送到数据库,而仅将引用设置为null将不会这样做。
答案 2 :(得分:1)
Hibernate对级联操作的支持有时候会有点古怪。如果您发现无法获得所需的开箱即用行为,则可以实施Hibernate Interceptor or a Hibernate event listener。实际上很容易做以太,而且这个努力是值得的(你的主要代码仍然很干净)。
在这种情况下,您可能希望实施PostUpdateEventListener或PreUpdateEventListener。