Mysql 具有相同标识符值的不同对象已与实体的会话XXX关联
我们有一个ASP.NET MVC 3 C#项目,运行NHibernate 3和Castle.ActiveRecord for MySQL,我们试图让“每个请求一个会话”来工作 它似乎对某些东西有效,但当我们执行Mysql 具有相同标识符值的不同对象已与实体的会话XXX关联,mysql,asp.net-mvc,asp.net-mvc-3,nhibernate,nhibernate-3,Mysql,Asp.net Mvc,Asp.net Mvc 3,Nhibernate,Nhibernate 3,我们有一个ASP.NET MVC 3 C#项目,运行NHibernate 3和Castle.ActiveRecord for MySQL,我们试图让“每个请求一个会话”来工作 它似乎对某些东西有效,但当我们执行SaveAndFlush()时,该命令会给我们一个错误: A different object with the same identifier value was already associated with the session: 142 如果我们只尝试执行Save(),我们会
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")
有什么想法吗?基本上,问题可能在于您试图
保存()一个已经存在的对象。如果对象已设置标识符(object.Id=142
),则不需要保存该对象
如果您对其进行了更改,并且需要保存这些更改,则需要使用Update()
方法(如@oskarbergren所述)或SaveOrUpdate()
来检查并决定是保存还是更新对象。最后一个可能对你最有效。改变你的现状
session.Save(object);
对,
Session
对象来自NHibernate的SessionFactory
实现。但是,我看到您正在使用ActiveRecordMediator
,因此您可以使用
ActiveRecordMediator.GetSessionFactoryHolder().CreateSession()
要创建一个会话
您可以使用来保存模型。您知道save()、Update()和save()之间的区别吗?SaveAndFlush中的文本在对象/模型上表示,如果其alrady存在,则其更新。。。我们已经在应用程序中使用了多年,但现在当我们更改为“每个请求一个会话”时,它开始成为一个问题。。。
ActiveRecordMediator.GetSessionFactoryHolder().CreateSession()