很抱歉,如果这是一个傻瓜,无法找到它,但真正地不知道该怎么寻找,反正...

我有三个类,ParentChildOther

Parent有许多Child其中的孩子有一个Parent_Id

Other通过Child列保存到Child_Id参考

当我删除Parent,我也想删除所有相关Child对象。如果这些Child目的通过任何Other类引用,我希望自己的(在Other对象)Child_Id引用废止。

什么级联规则,我需要在这两种关系?

此外,将更新的NHibernate实体内存以及在数据库中?

即。如果我有记忆一堆ParentChildOther的(即从数据库中,而不是短暂的加载),并告诉NH删除Parent,会发生什么?我假设ParentChild目标将变得短暂?会发生什么事,以任何Child对象的Other财产?

编辑:使用全删除 - 孤儿时,什么类的对象作为孤儿?在上面的例子中,是一个Child孤儿如果它的父Parent被删除?考虑一个实体时作为孤立是否从Other物质基准?

由于

有帮助吗?

解决方案

NH不更新在存储器中的任何您的实体(除ID和版本的)。 NH概不负责管理你的实体之间的关系。它只是坚持你的记性到数据库的东西。

从这个角度来看

应该变得更容易理解。

cascade="delete"意味着当父对象被删除,子被删除。 cascade="delete-orphan"意味着,另外,孩子即使删除,如果没有父引用它了。这当然只是如果孩子是在会话中工作。

在删除的实例被在存储器中暂时的。引用到瞬时对象(从Other)将导致异常。据我所知,你需要自己删除已删除的情况下参考。你或许可以把它隐含的一些技巧,但我怀疑,这将是干净的。它的业务逻辑。

有关的父子关系,cascade="all-delete-orphan"是适当的。

有关定期参考我更喜欢cascade="none"

有一个很好的解释

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top