我有两个对象:User和Resume 。简历有 User user field 。 在我的代码中,我首先得到 user对象并对其进行一些更改。万一Resume.findByUser(user)存在我得到简历并在那里做了一些更改。
如果我打电话user.save()和resume.save()我收到一个异常,说 session 中有另一个对同一对象的引用,所以我开始使用 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 相同的对象。
如果您能帮助解决此问题,我将不胜感激,谢谢。
请您参考如下方法:
由于 GORM 是基于 hibernate 构建的,因此当您在 resume 上调用 merge 时,它将向下级联到字段 user。
当您在一个事务中调用 user.merge() ,然后调用resume.merge()时,在调用resume.merge()时,您的用户字段在数据库中的版本比resume实例中保存的版本更新。
我建议您在进行更改和合并之前调用resume.user.refresh()或resume.refresh()。




