[英]grails create criteria non unique object error if wrapped in withNewSession
我有看起來像這樣的標准
//Inventory.withNewSession{
Set inventory=Inventory.withCriteria{
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
inventoryDetail{
eq('userAdded',true)
}
...
}
//}
如果將其包裝在withNewSession中,則會在會話錯誤中得到重復的鍵和非唯一對象。 如果我不使用withNewSession,它會起作用。
為什么?
如果您已經有一個會話並加載了id=1
(例如)的對象,然后創建了一個新會話並加載了該對象。 當新的會話塊結束時,休眠會話將加入現有的會話(我是說對嗎?),現在,您的兩個對象都加載了相同的ID。
我不確定您為什么在這里使用withNewSession
,是否存在無需休眠會話即可執行的路徑? 您是否按照貿發會議的建議,嘗試以事務隔離的方式進行隔離?
也許嘗試與withTransaction一起使用replace withNewSession?
Inventory.withTransaction{
Set inventory=Inventory.withCriteria{
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
inventoryDetail{
eq('userAdded',true)
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.