Hibernate父/子关系

时间:2012-01-22 12:03:57

标签: hibernate parent-child

我想知道为什么如果我有父子关系并且想要将子项添加到父项中,那么设置子项的父项并且必须将子项添加到父项中是不够的。

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

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

不足以设置子项的父项,并将一对多的关系标记为inverse =“true”?

2 个答案:

答案 0 :(得分:1)

看看this so-thread。如果您的映射包含hibernate所需的所有内容,那么只需设置父级即可。该线程中的答案还解释了所有缓存的对象也没有更新,并为此提供了解决方案。

答案 1 :(得分:0)

最后一行并非绝对必要。 Hibernate使用所有者方(在本例中为子方)来知道是否必须保持关联。

但是,它并不关心你是否初始化了另一方,并且不会为你做这件事。因此,如果此方法恰好将父级返回到GUI,则GUI将在其子级列表中获得父级而不包含新子级。同样,它的代码片段只是较长事务的一小部分,事务中的其余代码将不会在子列表中看到新子节点,因为您无法保持对象图的一致性。

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