2011-07-19 73 views
0

我有3個表:Transiend異常的NHibernate

僱員{PK:僱員,名字,姓氏} 項目{PK:專案編號,名稱,描述}

EmployeebyProject {PK:僱員:INT, PK:ProjectId:Project,DateBegin:int,DateEnd:DateTime}

我需要在此表中做一些CRUD。

現在我需要插入,順便說一句,在nhibernate的軟件中EmployeebyProject類擁有對象Employee和Project而不是EmployeeId和ProjectId。

這是映射

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="AdminProject" 
        namespace="AdminProject.Business.Entity"> 

    <class name="EmployeebyProject"> 

    <composite-id> 
     <key-many-to-one name="Employee" column="EmployeeId" class="Employee"></key-many-to-one> 
     <key-many-to-one name="Project" column="ProjectId" class="Project" ></key-many-to-one> 
    </composite-id> 


    <property name="DateBegin"/> 
    <property name="DateEnd"/> 

    </class> 

</hibernate-mapping> 

問題是,當我嘗試保存發生NHibernate.TransientObjectException。我怎樣才能避免它?

回答

0

一個TransientObjectException意味着你已經告訴Hibernate保存一些對象,但該對象引用了另一個你沒有保存的對象。通常有兩種方法來解決這個問題:

  1. 手動保存其他物體封閉事務被提交之前。
  2. cascading添加到關係中,以便當您保存第一個對象時,另一個對象也被保存,只是從第一個對象引用。
+0

因此,在添加級聯的情況下,在這個映射中,sintax怎麼樣?謝謝 – ale

+0

@ale:我不確定,因爲它是composite-id的一部分,但我懷疑你可以在任何[級聯類型](http://docs.jboss)中添加'cascade =「...」'。 org/hibernate/core/3.3/reference/en/html/objectstate.html#objectstate-transitive)。 –