2013-01-18 60 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

相关问题