2

ここで親子関係に問題があります。コレクション側(子側)から永続化すると、1つではなく2つの新しい子を取得します。

休止状態のマッピングは次のとおりです。

    <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のドキュメントには、双方向の関係がこのように機能するはずであると記載されているため、これは混乱を招きます。私は何が欠けていますか?

4

1 に答える 1

2

親のコレクションでカスケード永続化をオンにしたため、子エンティティで永続化を明示的に呼び出す必要はありません。親が管理された状態にある場合、新しい子は次回のトランザクションのコミット時または同期時に永続化されます。リンクしたサンプル ドキュメントでは、カスケードがオンになっていません。

于 2010-07-30T18:41:54.793 に答える