ошибка временного экземпляра Grails на объектах только для чтения - PullRequest
0 голосов
/ 07 июня 2019

Я столкнулся с проблемой, которую я исправил путем рефакторинга, но есть кое-что, чего я не совсем понимаю, о том, как grails пытается сохранить вещи, когда сеанс сбрасывается.Проблема была в следующем:

 a method returned an existing record as read only

another method checked if action was necessary:
     create new related instance
     add existing record to new instance hasMany association

     call a validate service method on the new instance
         a cross service call is transactional. this triggers a flush
             ERROR-> object references unsaved transient instance- the newly created instance

Я исправил поток, но я не до конца понимаю, почему какой-либо объект пытался сохранить в тот момент.

Новый экземпляр несвязан с контекстом сеанса еще.Существующая запись доступна только для чтения, поэтому она также не должна пытаться сохранить.

Служба не вызывала сохранение ни для одного объекта - она ​​выполняла некоторые инициированные действия, но не напрямую для этих двух записей.

Я ожидал бы, что необходимо явно вызвать newInstance.save () или session.setReadOnly (существующий, false), чтобы сброс сеанса действовал на любую из этих двух записей.Есть ли что-то, что может привести к игнорированию readonly за кулисами?

...