0

親オブジェクトとその詳細オブジェクトがあります。マッピングは以下のコードで言及されています -

親オブジェクトのマッピング

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class lazy = "false" name="com.test.model.Parent" table="parent">
        <id name="parentId" column="PARENT_ID" type="long">
            <generator class="sequence">
                <param name="sequence">PARENT_ID_SEQ</param>
            </generator>
        </id>
        <set 
            name="childSet" 
            lazy="false" 
            cascade="all-delete-orphan" 
            inverse="true" 
            table = "child" 
            order-by = "CHILD_ID"
            >
            <key column="PARENT_ID"/>
            <one-to-many class="com.test.model.Child"/>
        </set>
    </class>
</hibernate-mapping>

子オブジェクトのマッピング

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.test.model.Child" table="hot_Cash_coupon">
        <id name="childId" column="CHILD_ID" type="long">
            <generator class="sequence">
                <param name="sequence">CHILD_ID_SEQ</param>
            </generator>
        </id>
        <many-to-one name="parent"
            class="com.test.model.Parent" column="PARENT_ID" not-null="true" />
    </class>
</hibernate-mapping>

私は、たとえば 3 人の子供を持つ新しい親を救うことができます。さて、更新操作では、

parent.childSet では、すべての値を削除して新しい値を設定しています。私が session.update(parent) を行うとき、私の要件は、

  1. 親の既存のすべての子を削除します-parent.childSetにはそれらがありません。
  2. parent.childSet で使用可能な新しい値を挿入します。

ここで、parent.childSet は、親クラス/HBM マッピングのセットを意味します。

今起こっている問題は、

  1. 例外をスローしています-「("CHILD"."PARENT_ID") に NULL を挿入できません」

質問が明確でない場合は、質問を更新し続けます。

御時間ありがとうございます!

4

1 に答える 1

0

とりあえずsession.update(parent)をやっています。CHILD テーブルに存在する外部キーとオーファン レコードを無効にするもの。その後、孤児の session.delete(...) を手動で実行します。

これは、解決策というよりも回避策です。

于 2015-02-11T06:24:21.300 に答える