1
執行的基本順序:NHibernate的NonUniqueObjectException重新附加對象時,該會話(鎖定)
- 的
PersistentObjects
集合被詢問然後分別從會話高速緩存。 - 將集合傳遞給需要將它們重新附加到會話以便延遲加載某些屬性的模塊(使用
session.Lock(obj, LockMode.None)
)。 - 模塊完成處理後,另一個模塊會嘗試使
SaveOrUpdate
UserSetting
對象具有初始化操作的用戶的一些使用情況統計信息。 - 對
session.Flush()
NHibernate拋出NonUniqueObjectException
。
我發現,解決此問題的工作的一種方式是讓對象的新副本:
obj = session.Get(obj.GetType(), (obj as PersistentObject).Id);
,而不是與session.Lock
重新連接。然而,這是非最優的,因爲一些記錄集可能相當大,並且單獨重新獲取每個對象可能成爲性能拖累。
非唯一對象是僅存在於PersistentObject
類中的引用對象,而不是UserSetting
類。所以我不明白爲什麼刷新會導致這種異常。
我試過在模塊完成後逐出緩存的對象,但這沒有幫助。
有誰知道更好的方法將對象附加到會話,可以避免此問題?
衛生署!這是顯而易見的解決方案,也是我應該想到的。現在我感到很傻。 ;) – Joel 2009-08-14 20:42:50