Подтвердить что ты не робот

Спящий режим /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. Я предполагаю, что исключение выбрано в строке выше, потому что только в этот момент объект, добавленный в коллекцию, сохраняется.

4b9b3361

Ответ 1

Основная проблема, вероятно, в том, что Hibernate не каскадирует сохранение. Поэтому, когда вы сбрасываете Member, Hibernate замечает, что коллекция все еще грязная (что, вероятно, не то, что вы хотите). Таким образом, либо очистите коллекцию вручную, либо сообщите Hibernate о каскадировании всех обновлений.

Ответ 2

Я нашел возможное решение здесь.

Собственно, посмотрите на toString, equals, hashcode и убедитесь, что вы не получаете доступ к своему ленивому аксессуру.

Я знаю, что я говорю о java, и здесь речь идет о граале, но, возможно, для грааля есть такая же вещь.

Не стесняйтесь редактировать.

Это была проблема для меня (в java)

Ответ 3

Единственный раз, когда я столкнулся с этой победой, является использование событий Hibernate, например. beforeInsert, beforeUpdate и т.д. - вы используете их?

В JIRA есть проблема, связанная с этим, которая была исправлена ​​для Grails 1.2

Ответ 4

У меня была эта ошибка, когда попытался добавить элемент в коллекцию после удаления элементов из коллекции. Я решил это, вызвав save(flush:true), прежде чем добавлять новые элементы в коллекцию.

  • В моем случае коллекция всегда возвращается из select.