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

时间:2012-02-29 14:16:43

标签: java hibernate

  

可能重复:
  Hibernate: different object with the same identifier value was already associated with the session

我正在使用Hibernate和Struts 1.我的Web应用程序在一台机器上运行,而我的Hibernate代码在另一台机器上运行。我正在使用Web服务来访问数据库。我的问题是,当我尝试更新任何对象时,它会抛出“org.hibernate.NonUniqueObjectException”,当我通过我的服务方法调用commit时。

  

引起:org.hibernate.NonUniqueObjectException:一个不同的对象   具有相同标识符的值已经与   会话:[ .emp#2]

我无法找到问题所在,但我认为当我检索对象进行编辑时,它会附加到Hibernate会话,然后当我尝试更新时,它会在服务端创建一个新对象,因为我反序列化对象,因此可能有两个具有相同标识符的对象。

有没有人对此可能发生的事情有任何了解?

1 个答案:

答案 0 :(得分:2)

在提交之前,您需要将merge分离的对象重新放回Hibernate会话中。使用(旧版)HibernateUtil类,您的代码将类似于:

final Session session = HibernateUtil.getInstance().getSessionFactory().getCurrentSession();
// ...
session.merge(entity);

另见here