请问Hibernate saveOrUpdate方法删除孩子?

时间:2012-05-08 20:33:21

标签: java hibernate

我有一个应用程序通过hibernate加载对象,然后将这些对象作为分离的对象传递给另一个层。对这些对象的任何更改都会发送回休眠层,我会在这些对象上调用saveOrUpdate()

如果我在调用saveOrUpdate()之前只是从集合中删除子对象,那么hibernate是否会删除传递到saveOrUpdate()的对象中集合中包含的一对多关系子对象?

如果没有,那么通常如何在使用分离对象的hibernate应用程序中完成?

2 个答案:

答案 0 :(得分:5)

  

如果我只是在调用saveOrUpdate()之前从集合中删除子对象,hibernate是否会删除传递到saveOrUpdate()的对象中集合中包含的一对多关系子对象?

不,默认情况下不是。在这种情况下,这种子对象被称为“孤儿”,假设某些其他实体也没有对它们的引用。

这在文档11.11. Transitive persistence中讨论:

  

特殊的级联样式delete-orphan仅适用于一对多关联,并指示delete()操作应应用于从关联中删除的任何子对象。使用注释没有CascadeType.DELETE-ORPHAN等价物。相反,您可以使用属性orphanRemoval,如例11.4“@OneToManyorphanRemoval”中所示。 如果从@OneToMany集合中删除实体,或者从@OneToOne关联中取消引用关联实体,则如果orphanRemoval设置为true,则可以将此关联实体标记为删除< /强>

答案 1 :(得分:0)

默认情况下,它不会。您可以使用@Cascade(CascadeType.DELETE_ORPHANS)来实现这一目标。