Grails GORM:合并时的DuplicateKeyException

时间:2013-04-19 10:04:13

标签: hibernate grails gorm

我有两个对象:UserResume。 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相同的对象。

我将非常感谢你对这个问题的帮助,谢谢。

1 个答案:

答案 0 :(得分:5)

由于GORM是基于休眠构建的,当您在恢复上调用合并时,它将级联到字段用户

当您在一个事务中调用user.merge()然后调用resume.merge()时,在调用resume.merge()时,您的用户字段在DB中的版本比在resume实例上保留的版本更新。

我建议您在进行更改和合并之前调用resume.user.refresh()或resume.refresh()。