尝试使用
if(!musician.style.isAttached()){
musician.style.attach();
}
isAttached的代码寄存器返回false。 但是当它试图附加()时,它给我一个错误说
"object with the same identifier value was already associated with the session"
帮助我理解。如果标识符已经与会话关联,为什么isAttached()没有为会话返回TRUE?
答案 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