可能重复:
休眠:具有相同标识符值的不同对象已经与会话关联
我正在使用Hibernate和Struts1。我的web应用程序在一台机器上运行,Hibernate代码在另一台机器中运行。我正在使用web服务访问数据库。我的问题是,当我尝试更新任何对象时,当我通过服务方法调用commit时,它会抛出"org.hibernate.NonUniqueObjectException"。
由:org.hibernate.NonUniqueObjectException引起:其他对象具有相同标识符值的已与会话:[..emp#2]
我无法找到问题所在,但我认为当我检索对象进行编辑时,它会附加到Hibernate会话,然后当我尝试更新时,它在服务端创建一个新对象,因为我正在反序列化对象,所以可能有两个对象具有相同的标识符。
有人知道这可能会发生什么吗?
在提交对象之前,您需要将分离的对象merge
返回到Hibernate会话中。使用(遗留的)Hibernate Util类,您的代码看起来像:
final Session session = HibernateUtil.getInstance().getSessionFactory().getCurrentSession();
// ...
session.merge(entity);
另请参见此处。