gpt4 book ai didi

java - hibernate 双向一对多插入重复项

转载 作者:行者123 更新时间:2023-11-30 11:58:07 25 4
gpt4 key购买 nike

我在处理亲子关系时遇到了问题。当我从收集方( child 方)坚持时,我得到了 2 个新 child 而不是一个。

这是 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>

这是用于将 child 添加到双向关系中的 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 文档 here说双向关系应该以这种方式工作。我错过了什么?

最佳答案

您在父级集合上启用了级联持久化,因此无需在子实体上显式调用持久化。如果父级处于托管状态,则新的子级将在下次事务提交/有同步时持久化。您链接的示例文档中未打开级联。

关于java - hibernate 双向一对多插入重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3374245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com