我在这里遇到了亲子关系的问题。当我从收集方(孩子方)坚持下来时,我得到2个新孩子而不是一个。
以下是hibernate映射:
<set name="children" inverse="true"
cascade="all,delete-orphan" lazy="true"
order-by="CHILD_ID desc">
<key column="PARENT_ID" />
<one-to-many class="com.mycompany.Child" />
</set>
<many-to-one name="parent" class="com.mycompany.Parent" not-null="true">
<column name="PARENT_ID" />
</many-to-one>
以下是用于将子项添加到双向关系中的java代码:
// Persist logic...
Parent p = myParentService.findById(1);
Child c = new Child();
p.addChild(c);
myChildService.persist(child);
// Inside the parent class...
public void addChild(Child child)
{
if (this.children == null)
this.children = new LinkedHashSet<Child>();
this.children.add(child);
child.setParent(this);
}
如果我删除“this.children.add(child);”部分一切按预期工作。这很令人困惑,因为Hibernate documentaion here表示双向关系应该以这种方式工作。我错过了什么?
答案 0 :(得分:1)
您在父集合上启用了级联持久化,因此无需在子实体上显式调用persist。如果父级处于托管状态,则新的子级将在下次事务提交/存在同步时保留。在您链接的示例文档中未启用级联。