2013-01-18 65 views
0

我們有一個運行NHibernate 3和Castle.ActiveRecord for MySQL的ASP.NET MVC 3 C#項目,我們試圖獲得「一個會話每個請求「與this tutorial一起使用。具有相同標識符值的不同對象已與會話相關聯:XXX,實體

而且它似乎對一些東西的工作,但是當我們做SaveAndFlush(),命令給了我們一個錯誤:

A different object with the same identifier value 
was already associated with the session: 142 

如果我們嘗試做只Save()我們得到了相同的消息,所以它沒有任何關係與Flush()功能有關。

我找到一些結果,當我搜索,但沒有什麼我可以用它來工作。

東西我沒有測試過,因爲我不知道我該怎麼辦,是,

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "id") 

任何想法?

+1

您是否知道Save(),Update()和Save()之間的區別只能用於_new_持久化實體? –

+0

對象/模型的SaveAndFlush中的文本說,如果它的alrady存在,它的更新......我們已經在我們的應用程序中使用了這個多年,但現在當我們改變爲「每會話一次請求」時,它開始成爲一個問題... – RickardP

回答

1

基本上問題可能在於您正在嘗試Save()已存在的對象。如果對象已經設置了標識符(object.Id = 142),則不需要保存該對象。

如果進行更改,並需要保存那些你需要使用Update()方法(如通過@OskarBerggren提到的)變化或SaveOrUpdate()基本上檢查,並決定是否保存對象或更新。最後一個在你的情況下可能效果最好。更改當前,

session.Save(object); 

到,

session.SaveOrUpdate(object); 

Session對象是從NHibernate的SessionFactory實現。不過,我看你是使用ActiveRecordMediator,這樣你就可以使用,

ActiveRecordMediator.GetSessionFactoryHolder().CreateSession() 

創建Session你可以用它來保存你的模型。

+0

我如何獲得會話對象?今天我在模型對象上保存和保存... – RickardP

+0

更新了我的答案。 – rae1

+0

好的,星期一嘗試,謝謝,我讓你更新 – RickardP

相關問題