我有类似这样的条件
//Inventory.withNewSession{
Set inventory=Inventory.withCriteria{
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
inventoryDetail{
eq('userAdded',true)
}
...
}
//}
如果将其包装在withNewSession中,则会在会话错误中得到重复的键和非唯一对象。如果我不使用withNewSession,它将起作用。
为什么?
答案 0 :(得分:1)
如果您已经有一个会话并使用id=1
加载了对象(例如),然后创建了一个新会话并加载了该对象。当新的会话块结束时,休眠会话将加入现有的会话(我是说对吗?),现在,您的两个对象都加载了相同的ID。
我不确定您为什么在这里使用withNewSession
,有没有一条路径可以在没有休眠会话的情况下执行?正如贸发会议建议的那样,您是否正在尝试通过事务隔离此问题?
答案 1 :(得分:0)
maybe try to use replace withNewSession with withTransaction?
Inventory.withTransaction{
Set inventory=Inventory.withCriteria{
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
inventoryDetail{
eq('userAdded',true)
}
}
}