如果包含在withNewSession中,grails会创建标准非唯一对象错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果包含在withNewSession中,grails会创建标准非唯一对象错误相关的知识,希望对你有一定的参考价值。
我的标准看起来像这样
//Inventory.withNewSession{
Set inventory=Inventory.withCriteria{
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
inventoryDetail{
eq('userAdded',true)
}
...
}
//}
如果我将它包装在withNewSession中,我会在会话错误中获得重复键和非唯一对象。如果我不使用withNewSession,它可以工作。
为什么?
答案
如果您已经有一个会话并使用id=1
(例如)加载了对象,然后创建了一个新会话并加载了同一个对象。当新会话块结束时,hibernate会话加入现有会话(我说这是对的吗?)现在你用两个对象加载了相同的ID。
我不确定你为什么在这里使用withNewSession
,是否有一条路径可以在没有休眠会话的情况下执行?正如TDC建议的那样,您是否正在尝试将此事务隔离开来?
另一答案
也许尝试使用withTransaction替换newNewSession?
Inventory.withTransaction{
Set inventory=Inventory.withCriteria{
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
inventoryDetail{
eq('userAdded',true)
}
}
}
以上是关于如果包含在withNewSession中,grails会创建标准非唯一对象错误的主要内容,如果未能解决你的问题,请参考以下文章