Grails isAttached()和attach()

时间:2016-04-03 21:54:11

标签: hibernate grails gorm

尝试使用

if(!musician.style.isAttached()){
    musician.style.attach();
}

isAttached的代码寄存器返回false。 但是当它试图附加()时,它给我一个错误说

"object with the same identifier value was already associated with the  session"

帮助我理解。如果标识符已经与会话关联,为什么isAttached()没有为会话返回TRUE?

3 个答案:

答案 0 :(得分:2)

更新:我认为 mohsenmadi 的答案很可能与您的问题相关 - 我错过了style是关联的域对象。

如果没有看到更多的代码,很难具体,但我怀疑你可能有重复的对象具有相同的标识符,其中一个附加到您的会话而另一个不附加(这就是为什么isAttached()返回false)。我在进行大量手动会话管理(例如实施批处理)时发现了这种情况。

答案 1 :(得分:1)

我也有这个问题,理论在运行时没有达到预期的效果。我的解决方案类似musician.style = Style.get(styleId),您可以从styleId获取params或在某处记住您的位置。这当然可以正常工作,但它是一个数据库/缓存调用,如果在循环内部则会很糟糕。

答案 2 :(得分:1)

当前会话中的所有实体都可以在

中找到
grails.util.Holders.grailsApplication.mainContext.sessionFactory.currentSession.persistenceContext.entitiesByKey