簡體   English   中英

如果用withNewSession包裝,grails創建條件非唯一對象錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM