我有两个对象:User
和Resume
。 Resume有一个User user
字段。
在我的代码中,我首先得到一个user
对象并对其进行一些更改。如果Resume.findByUser(user)
存在,我会收到简历并在那里做一些更改
如果我拨打user.save()
和resume.save()
,我会收到一个异常,说会话中有同一个对象的另一个引用,所以我开始使用merge()
。
当我致电user.merge()
时,数据已保存,但当我致电resume.merge()
时,我收到此例外情况:
org.springframework.dao.DuplicateKeyException: a different object with the same identifier value was already associated with the session: [com.wizard.security.User#36]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.wizard.security.User#36]
我不知道该怎么做。看起来问题出在resume.user
对象中,该对象引用与user
相同的对象。
我将非常感谢你对这个问题的帮助,谢谢。
答案 0 :(得分:5)
由于GORM是基于休眠构建的,当您在恢复上调用合并时,它将级联到字段用户。
当您在一个事务中调用user.merge()然后调用resume.merge()时,在调用resume.merge()时,您的用户字段在DB中的版本比在resume实例上保留的版本更新。
我建议您在进行更改和合并之前调用resume.user.refresh()或resume.refresh()。