我試圖保存一對多的映射,並且nHibernate會拋出此錯誤,因爲它爲ordPsiPt
表的兩個條目分配了相同的ID。nHibernate具有相同標識符值的不同對象
我環顧四周,使用Session.merge()
也沒有工作。
下面是類的映射:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="FrancosPoS" namespace="FrancosPoS.DBMapping" xmlns="urn:nhibernate-mapping-2.2">
<class name="ordPsiPt" table="ord_psi_pt" lazy="true" >
<id name="idOrdPastaIT">
<generator class="identity" />
</id>
<many-to-one lazy="false" name="ordPsi">
<column name="idOrdPastaI" sql-type="int(11)" not-null="true" />
</many-to-one>
<many-to-one lazy="false" name="pastaTopping">
<column name="idPastaT" sql-type="int(11)" not-null="true" />
</many-to-one>
<property name="amount">
<column name="Amount" sql-type="varchar(50)" not-null="true" />
</property>
</class>
</hibernate-mapping>
order_psi:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="FrancosPoS" namespace="FrancosPoS.DBMapping" xmlns="urn:nhibernate-mapping-2.2">
<class name="ordPsi" table="ord_psi" lazy="true" >
<id name="idOrdPastaI">
<generator class="identity" />
</id>
<many-to-one lazy="false" name="order">
<column name="idOrder" sql-type="int(11)" not-null="true" />
</many-to-one>
<many-to-one lazy="false" name="pastaIndividual" class="pastaIndividual">
<column name="idPastaI" sql-type="int(11)" not-null="false" />
</many-to-one>
<property name="obs">
<column name="obs" sql-type="varchar(50)" not-null="false" />
</property>
<property name="price">
<column name="price" sql-type="decimal(8,4)" not-null="true" />
</property>
<bag name="ordPsiPt" table="ordPsiPt" cascade="save-update" inverse="true">
<key column="idOrdPastaIT"/>
<one-to-many class="ordPsiPt"/>
</bag>
</class>
</hibernate-mapping>
順序:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="FrancosPoS" namespace="FrancosPoS.DBMapping" xmlns="urn:nhibernate-mapping-2.2">
<class name="order" table="`order`" lazy="true" >
<id name="idOrder">
<generator class="identity" />
</id>
<property name="price">
<column name="price" sql-type="decimal(8,4)" not-null="true" />
</property>
<property name="cash">
<column name="cash" sql-type="tinyint(1)" not-null="false" />
</property>
<property name="credit">
<column name="credit" sql-type="tinyint(1)" not-null="false" />
</property>
<property name="obs">
<column name="obs" sql-type="varchar(350)" not-null="false" />
</property>
<bag name="orderPsi" table="ordPsi" cascade="all" inverse="true">
<key column="idOrdPastaI"/>
<one-to-many class="ordPsi"/>
</bag>
</class>
</hibernate-mapping>
袋取IList
在CS映射。
當我使用order對象調用SaveOrUpdate()
時,在一個orderPsi中有兩個orderPsiPt(例如),我得到了有關標識符的錯誤。
我試圖使用conn.Session.Merge(order.orderPsi[0].ordPsiPt[1]);
只爲這個樣本,但沒有成功也。
是否有幫助,這裏有來自兩個ordPsiPt itens手錶: http://db.tt/2wNWldyd
我也想看看這個:
http://ayende.com/blog/4282/nhibernate-cross-session-operations