Спящий режим /GORM: сбор не обрабатывался flush()
У меня есть тест интеграции в моем приложении Grails, который терпит неудачу, когда я пытаюсь сохранить объект типа Member
invitingMember.save(flush: true)
Это вызывает следующее исключение
org.hibernate.AssertionFailure: коллекция [com.mycompany.facet.Facet.channels] был не обрабатывается flush() при com.mycompany.member.MemberConnectionService.addOrUpdateContact(MemberConnectionService.groovy: 939)
Ранее в транзакции я добавляю объект к свойству коллекции invitingMember
. Я предполагаю, что исключение выбрано в строке выше, потому что только в этот момент объект, добавленный в коллекцию, сохраняется.
Ответы
Ответ 1
Основная проблема, вероятно, в том, что Hibernate не каскадирует сохранение. Поэтому, когда вы сбрасываете Member
, Hibernate замечает, что коллекция все еще грязная (что, вероятно, не то, что вы хотите). Таким образом, либо очистите коллекцию вручную, либо сообщите Hibernate о каскадировании всех обновлений.
Ответ 2
Я нашел возможное решение здесь.
Собственно, посмотрите на toString, equals, hashcode и убедитесь, что вы не получаете доступ к своему ленивому аксессуру.
Я знаю, что я говорю о java, и здесь речь идет о граале, но, возможно, для грааля есть такая же вещь.
Не стесняйтесь редактировать.
Это была проблема для меня (в java)
Ответ 3
Единственный раз, когда я столкнулся с этой победой, является использование событий Hibernate, например. beforeInsert, beforeUpdate и т.д. - вы используете их?
В JIRA есть проблема, связанная с этим, которая была исправлена для Grails 1.2
Ответ 4
У меня была эта ошибка, когда попытался добавить элемент в коллекцию после удаления элементов из коллекции. Я решил это, вызвав save(flush:true)
, прежде чем добавлять новые элементы в коллекцию.
- В моем случае коллекция всегда возвращается из
select
.