私は休止状態のマッピングで宣言された親子関係を持っています。 Parentには、Childオブジェクトのコレクションが含まれています。私が作成し、新しい子オブジェクトを含む新しい親を保存すると、私はエラーを取得する:ここでHibernateの外部キーがSaveOrUpdateで更新されない
Cannot insert NULL into ("SCHEMA"."ACCESS_LIST_MEMBERS"."LIST_ID")
は、親のマッピングです:
<hibernate-mapping>
<class name="AccessLists" optimistic-lock="version" schema="schema" table="ACCESS_LISTS">
<id name="id" type="java.lang.Integer">
<column name="ID" precision="38" scale="0"/>
<generator class="sequence">
<param name="sequence">ACCESS_LISTS_SEQ</param>
</generator>
</id>
<property name="userId" type="java.lang.Integer">
<column name="USER_ID" not-null="true" precision="38" scale="0"/>
</property>
<property name="name" type="string">
<column length="30" name="NAME" not-null="true"/>
</property>
<set name="accessListMembers" cascade="all" table="ACCESS_LIST_MEMBERS" inverse="false" fetch="select">
<key>
<column name="LIST_ID" precision="38" scale="0" not-null="true" />
</key>
<one-to-many class="AccessListMembers" />
</set>
</class>
</hibernate-mapping>
子のマッピング:
<hibernate-mapping>
<class name="AccessListMembers" optimistic-lock="version" schema="schema" table="ACCESS_LIST_MEMBERS">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="sequence">
<param name="sequence">ACCESS_LIST_MBRS_SEQ</param>
</generator>
</id>
<property name="listId" type="java.lang.Integer">
<column name="LIST_ID" not-null="true" />
</property>
<property name="wwid" type="string">
<column length="5" name="WWID" not-null="true"/>
</property>
<join table="AccessLists" inverse="true">
<key column="ID"/>
<many-to-one name="accessList" column="LIST_ID" not-null="true"/>
</join>
</class>
</hibernate-mapping>
私はを追加すると、の情報を子マッピングに追加すると、Hibernateは親オブジェクトACCESS_LIST.IDからLIST_IDを取得するように通知しますが、これはうまくいきませんen。私はこのコードを実行するとエラーが表示されます。
public static void saveList(AccessLists list) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
try {
session.saveOrUpdate(list);
tx.commit();
} catch (Exception e) {
tx.rollback();
throw e;
}
}
私は手動でaccesslistの上AccessListMembersコレクション内の各オブジェクトにLIST_IDを設定する必要がありますする必要はありません。私はJBossのドキュメントを読んだことがありますが、私は、一対多と多対1の関係がどのように機能するか誤解していると思います。
hibernateがAccessListでINSERTを実行し、AccessListMembersでLIST_IDを更新し、AccessListMembersでINSERTを実行するように、どのようにマッピングを設定できますか?
ソリューションを見つけましたか? –
@PeterRader Hibernateマッピングを使用して処理できる効率的なものではありません。ますます多くの場合、これは親子コレクションや休止状態の問題ですが、誰も私に固いソリューションを提供することはできませんでした。 – Encryption