Hibernate - 修改父对象时对子项(集合)的级联修改

时间:2018-01-23 13:27:21

标签: java hibernate

我目前正在阅读: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(父)对象的修改。

  

注意:我不是试图级联删除父对象,而是对其进行级联修改。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

当猫被移除时也要移除所有小猫;你需要级联样式delete-orphan。默认情况下,这不包含在all

所以

<set cascade="all, delete-orphan" name="Kittens" inverse="true">

应该这样做。

另一方面,如果您尝试直接在数据库中删除小猫,实际对象仍将在您的集合中引用。一旦你冲洗你的猫,休眠就会重新创建小猫。