在(N)Hibernate的级联,我需要哪些规则?
-
19-09-2019 - |
题
很抱歉,如果这是一个傻瓜,无法找到它,但真正地不知道该怎么寻找,反正...
我有三个类,Parent
,Child
和Other
Parent
有许多Child
其中的孩子有一个Parent_Id
柱
Other
通过Child
列保存到Child_Id
参考
当我删除Parent
,我也想删除所有相关Child
对象。如果这些Child
目的通过任何Other
类引用,我希望自己的(在Other
对象)Child_Id
引用废止。
什么级联规则,我需要在这两种关系?
此外,将更新的NHibernate实体内存以及在数据库中?
即。如果我有记忆一堆Parent
,Child
和Other
的(即从数据库中,而不是短暂的加载),并告诉NH删除Parent
,会发生什么?我假设Parent
和Child
目标将变得短暂?会发生什么事,以任何Child
对象的Other
财产?
编辑:使用全删除 - 孤儿时,什么类的对象作为孤儿?在上面的例子中,是一个Child
孤儿如果它的父Parent
被删除?考虑一个实体时作为孤立是否从Other
物质基准?
由于
解决方案
NH不更新在存储器中的任何您的实体(除ID和版本的)。 NH概不负责管理你的实体之间的关系。它只是坚持你的记性到数据库的东西。
从这个角度来看应该变得更容易理解。
cascade="delete"
意味着当父对象被删除,子被删除。
cascade="delete-orphan"
意味着,另外,孩子即使删除,如果没有父引用它了。这当然只是如果孩子是在会话中工作。
在删除的实例被在存储器中暂时的。引用到瞬时对象(从Other
)将导致异常。据我所知,你需要自己删除已删除的情况下参考。你或许可以把它隐含的一些技巧,但我怀疑,这将是干净的。它的业务逻辑。
有关的父子关系,cascade="all-delete-orphan"
是适当的。
有关定期参考我更喜欢cascade="none"
。
有一个很好的解释