繁体   English   中英

具有相同标识符值的另一个对象已与以下会话相关联:实体的XXX

[英]A different object with the same identifier value was already associated with the session: XXX, of entity

我们有一个运行NHibernate 3和MySQL的Castle.ActiveRecord的ASP.NET MVC 3 C#项目,我们试图获得“每个请求一个会话”来使用本教程

它似乎对某些东西SaveAndFlush() ,但是当我们执行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")

有任何想法吗?

基本上,问题可能出在您试图Save()一个已经存在的对象。 如果对象具有已设置的标识符( object.Id = 142 ),则无需保存该对象。

如果对其进行更改,并且需要保存这些更改,则需要使用Update()方法(如@OskarBerggren所述)或SaveOrUpdate() ,该方法基本上会检查并决定是否保存对象或更新对象。 在您的情况下,最后一个可能效果最好。 改变你的电流,

session.Save(object);

至,

session.SaveOrUpdate(object);

Session对象来自NHibernate的SessionFactory实现。 但是,我看到您正在使用ActiveRecordMediator ,因此您可以使用,

ActiveRecordMediator.GetSessionFactoryHolder().CreateSession()

创建Session您可以用来保存模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM