我有一个应用程序通过hibernate加载对象,然后将这些对象作为分离的对象传递给另一个层。对这些对象的任何更改都会发送回休眠层,我会在这些对象上调用saveOrUpdate()
。
如果我在调用saveOrUpdate()
之前只是从集合中删除子对象,那么hibernate是否会删除传递到saveOrUpdate()
的对象中集合中包含的一对多关系子对象?
如果没有,那么通常如何在使用分离对象的hibernate应用程序中完成?
答案 0 :(得分:5)
如果我只是在调用
saveOrUpdate()
之前从集合中删除子对象,hibernate是否会删除传递到saveOrUpdate()
的对象中集合中包含的一对多关系子对象?
不,默认情况下不是。在这种情况下,这种子对象被称为“孤儿”,假设某些其他实体也没有对它们的引用。
这在文档11.11. Transitive persistence中讨论:
特殊的级联样式
delete-orphan
仅适用于一对多关联,并指示delete()
操作应应用于从关联中删除的任何子对象。使用注释没有CascadeType.DELETE-ORPHAN
等价物。相反,您可以使用属性orphanRemoval,如例11.4“@OneToMany
与orphanRemoval
”中所示。 如果从@OneToMany
集合中删除实体,或者从@OneToOne
关联中取消引用关联实体,则如果orphanRemoval
设置为true,则可以将此关联实体标记为删除< /强>
答案 1 :(得分:0)
默认情况下,它不会。您可以使用@Cascade(CascadeType.DELETE_ORPHANS)来实现这一目标。