2012-01-22 84 views
0

我想知道为什么如果我有父母和子女的关系,并且想要将父母添加到孩子,仅设置孩子的父母并且不得不将孩子添加到父母。Hibernate父/子关系

Parent parent = new Parent(); 
Child child = new Child(); 
child.setParent(parent); 

// Why the next line? 
parent.getChild().add(child); 

是不足以设置孩子的父母,并标记一对多与inverse =“true”的关系?

回答

0

最后一行不是严格必要的。 Hibernate使用所有者方(在这种情况下是子方)来知道它是否必须保持关联。

但是,它不关心你是否初始化了另一面,而不会为你做。因此,例如,如果此方法发生将父项返回给GUI,GUI将在其子项列表中获得一个没有新子项的父项。同样,这段代码片段只是较长事务的一小部分,事务中的其余代码将不会在子列表中看到新的子代,因为您未能保持对象图的连贯性。

因此,除非此代码位于外观中,且在执行此代码段之后从不使用父代,则应初始化双方。如果你知道自己在做什么,并且你知道父代会超出范围,在这段代码片段之后没有使用和垃圾收集,只初始化拥有方就足够了。但请记住,会话缓存本身会维护对父级的引用,直到会话关闭。

1

看看this so-thread。如果你的映射包含了休眠需要的所有东西,那么设置父节点就足够了。该线程的答案还解释了所有缓存对象也没有更新,并提供了解决方案。