【问题标题】:Grails GORM: DuplicateKeyException on mergeGrails GORM:合并时出现 DuplicateKeyException
【发布时间】:2013-04-19 10:04:12
【问题描述】:

我有两个对象:User 和 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 引用相同的对象。

我会很感激这个问题的帮助,谢谢。

【问题讨论】:

  • 不是主题,但我只是注意到“简历”是“用户”倒过来+“我”。巧合?

标签: hibernate grails grails-orm


【解决方案1】:

由于 GORM 是建立在 hibernate 之上的,当你在 resume 上调用 merge 时,它​​会级联到字段 user。

当您在一个事务中调用 user.merge() 然后 resume.merge() 时,到调用 resume.merge() 时,您的用户字段在数据库中的版本比恢复实例中保存的版本更新。

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

【讨论】:

  • 太棒了!谢谢,你真的帮了我。
猜你喜欢
  • 1970-01-01
  • 2013-07-31
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多