2011-08-31 65 views
1

我試圖批量更新使用StatelessSession的實體。當使用NHibernate StatelessSession時更新實體並忽略子代理

因爲它是無狀態的,NHibernate在保存時不會自動級聯子實體。

這很好,因爲我不想對任何子實體進行任何更改。

不幸的是,在保存,NHibernate的抱怨:

「對象引用一個未保存的瞬態的實例 - 沖洗之前保存的瞬態的實例類型:MyAssembly.MyRandomEntity,實體:Castle.Proxies.MyRandomEntityProxy。」

中當然,如果我嘗試更新的子實體,我得到的錯誤:

「沒有留存爲:Castle.Proxies.MyRandomEntityProxy」

正如你所看到的,孩子實體是代理becau它尚未加載。我不需要它,我不想更新它......但即使我做了,我也不知道我該怎麼做。

任何想法如何解決這個問題,基本上告訴它忽略瞬態子實體?

更新

這裏是父對象對孩子實體的映射:

<many-to-one class="MyAssembly.Flight, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="OutboundFlight"> 
    <column name="OutboundFlightId" /> 
</many-to-one> 

這裏是子實體Id列:

<id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" unsaved-value="0"> 
    <column name="FlightId" /> 
    <generator class="assigned" /> 
</id> 
+0

爲什麼代理服務器暫態?如果在檢索它時創建它,那麼unsavedvalue的映射不正確。否則,誰在創造它? – Firo

+0

檢索時必須創建,我沒有觸及它。映射怎麼會出錯?我使用的是Fluent Nhibernate,並沒有對該子實體的映射做任何具體的操作。 –

+0

「MyRandomEntity」的id映射是怎樣的? – Firo

回答

1

其使用指定的生成器使用'unsavedvalue'來知道實例是持久還是瞬態。也許在數據庫中真的有一個id = 0的Flightobject?然後它將被創建爲Id = 0的代理,將被視爲臨時實例。

+0

不錯,謝謝! –