grails 创建条件非唯一对象错误,如果用 NewSession 包装



我有这样的标准

  //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)
       }
     }
}

相关内容

  • 没有找到相关文章

最新更新