7

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

saveOrUpdate()如果我在调用之前简单地从集合中删除子对象,休眠将删除传递到的对象中包含在集合中的一对多关系子对象saveOrUpdate()吗?

如果不是,那么这通常如何在使用分离对象的休眠应用程序中完成?

4

2 回答 2

5

saveOrUpdate()如果我在调用之前简单地从集合中删除子对象,休眠将删除传递到的对象中包含在集合中的一对多关系子对象saveOrUpdate()吗?

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

这在文档11.11 中进行了讨论。传递持久性

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

于 2012-05-08T20:53:54.977 回答
0

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

于 2012-05-08T20:53:52.310 回答