我有这样的标准
//Inventory.withNewSession{
Set inventory=Inventory.withCriteria{
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
inventoryDetail{
eq('userAdded',true)
}
...
}
//}
如果我将其包装在 withNewSession 中,我会在会话错误中得到重复的键和非唯一对象。如果我不与NewSession一起使用,它可以工作。
为什么?
如果您已经有一个会话并使用id=1
加载对象(例如(,然后创建了一个新会话并加载了相同的对象。 当新的会话块结束时,休眠会话将加入现有会话(我说的对吗?(,现在您都使用相同的 ID 加载了两个对象。
我不确定您为什么在这里使用 withNewSession
,是否有可以在没有休眠会话的情况下执行的路径? 您是否像TDC建议的那样尝试以事务方式隔离它?
也许尝试使用替换为NewSession与withTransaction?
Inventory.withTransaction{
Set inventory=Inventory.withCriteria{
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
inventoryDetail{
eq('userAdded',true)
}
}
}