我在我的休眠映射中聲明瞭父/子關係。父項包含一個Child對象的集合。當我創建並保存包含新的子對象的新父母,我得到一個錯誤:休眠外鍵在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,但這並不好恩。我在執行此代碼得到的錯誤:
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;
}
}
我不希望有手動設置LIST_ID每個在accesslist中的AccessListMembers集合中的對象。我已經瀏覽了JBOSS文檔,但我想我誤解了一對多和多對一的關係是如何工作的。
如何設置我的映射,以便hibernate知道要在AccessList上執行INSERT,更新AccessListMembers上的LIST_ID,並在AccessListMembers上執行INSERT?
您是否找到解決方案? –
@PeterRader不是一個可以通過使用Hibernate映射進行處理的有效方法。越來越多的時候,我發現這是父/子集合和休眠問題,但沒有人能夠爲我提供一個可靠的解決方案。 – Encryption