Я столкнулся с проблемой, которую я исправил путем рефакторинга, но есть кое-что, чего я не совсем понимаю, о том, как 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 за кулисами?