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