如何使用Hibernate会话提交非会话对象



可能重复:
休眠:具有相同标识符值的不同对象已经与会话关联

我正在使用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);

另请参见此处。

最新更新