2012-10-08 105 views
0

我試圖保存一對多的映射,並且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中有兩個ord​​erPsiPt(例如),我得到了有關標識符的錯誤。

我試圖使用conn.Session.Merge(order.orderPsi[0].ordPsiPt[1]);只爲這個樣本,但沒有成功也。

是否有幫助,這裏有來自兩個ord​​PsiPt itens手錶: http://db.tt/2wNWldyd

我也想看看這個:

http://ayende.com/blog/4282/nhibernate-cross-session-operations

回答

0

沒關係。我發現我的數據庫與映射有誤。我更新了映射並忘記編輯真正的表格。

表ordPsiPt是這樣的:

Old Table

而且應該是這樣的,以配合我的新的映射如上所述:

New table

在固定表後數據庫,第一槍就一切正常!

相關問題