我目前正在阅读:Hibernate Documentation Chapter 10.11 试图弄清楚hibernate的方法是如何工作的。
假设我有一个父对象 Cat ,并将以下映射与小猫子女相关联。
<set cascade="all" name="Kittens" inverse="true">
<key>
<column name="KittenName" length="36" not-null="true" />
</key>
<one-to-many class=".......model.Kittens" />
</set>
通过这种关联,我希望每当我加载()我的应用中的猫时,删除它的小猫集合和 saveOrUpdate()或 attachDirty()它在同一个Hibernate会话期间返回到数据库中,相关的小猫集合将被删除,但事实并非如此。在刷新期间生效的唯一更改是对Cat(父)对象的修改。
注意:我不是试图级联删除父对象,而是对其进行级联修改。
我在这里错过了什么吗?
答案 0 :(得分:1)
当猫被移除时也要移除所有小猫;你需要级联样式delete-orphan
。默认情况下,这不包含在all
。
所以
<set cascade="all, delete-orphan" name="Kittens" inverse="true">
应该这样做。
另一方面,如果您尝试直接在数据库中删除小猫,实际对象仍将在您的集合中引用。一旦你冲洗你的猫,休眠就会重新创建小猫。