merge(),update()上的Hibernate NonUniqueObjectException

时间:2013-05-08 13:54:30

标签: java spring hibernate

通过使用方法update()

更新对象时,我得到了这个错误 org.springframework.orm.hibernate3.HibernateSystemException:具有相同标识符值的另一个对象已与会话关联

当我使用方法merge()时我得到这个错误

org.hibernate.NonUniqueObjectException:具有相同标识符值的其他对象已与会话关联。

请帮忙。

2 个答案:

答案 0 :(得分:0)

您需要正确实现'hashCode'和'equals'方法,请参阅here。注意不要将id用作唯一的唯一属性 - >分隔对象ID和业务键。

答案 1 :(得分:0)

通常,当您尝试更新当前会话已在使用的对象时,会导致此问题。例如,如果您尝试更新当前登录用户的User对象。 要使其工作,您必须创建一个新的hibernate会话并使用它来更新您的对象。

User updatedUser = getAnUpdatedUserObject();
Session session2 = getSessionFactory().openSession();
Transaction tx2 = session2.beginTransaction();

session2.saveOrUpdate(updatedUser);

tx2.commit();
session2.close();