繁体   English   中英

休眠双向一对多插入重复项

[英]hibernate bidirectional one-to-many inserts duplicates

我在这里有亲子关系问题。 当我从收款方(孩子方面)坚持下来时,我得到了两个新孩子而不是一个。

这是休眠映射:

    <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文档说双向关系应该以这种方式工作。 我想念什么?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM