Grails GORM:合并时的DuplicateKeyException

svz*_*svz 2 grails hibernate grails-orm

我有两个对象:UserResume.简历有一个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.

我很感激你对这个问题的帮助,谢谢.

小智 5

由于GORM是基于休眠构建的,当你在简历上调用merge时,它将级联到现场用户.

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

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