grails создает критерий неуникальной ошибки объекта, если обернут в withNewSession - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть критерии, которые выглядят так:

  //Inventory.withNewSession{
    Set inventory=Inventory.withCriteria{
       setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
       inventoryDetail{
           eq('userAdded',true)
       }
       ...
     }
//}

Если я оберну это в withNewSession, я получу дубликат ключа и неуникальный объект в ошибках сеанса.Если я не использую с NewSession, он работает.

Почему?

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Если у вас уже был сеанс и загружен объект с id=1 (например), а затем создан новый сеанс и загружен этот же объект.Когда новый блок сеанса заканчивается, сеанс гибернации присоединяется к существующему сеансу (правильно ли я говорю?), И теперь у вас оба объекта загружены с одинаковым идентификатором.

Я не уверен, почему вы используете withNewSession здесь, есть ли путь, который это может выполнить без сеанса гибернации?Вы пытаетесь, как предлагает TDC, изолировать это транзакционно?

0 голосов
/ 17 апреля 2019

Может быть, попытаться использовать заменить с NewSession с withTransaction?

Inventory.withTransaction{
    Set inventory=Inventory.withCriteria{
       setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
       inventoryDetail{
           eq('userAdded',true)
       }
     }
}
...