Hibernate / GORM: коллекция не была обработана flush () - PullRequest
14 голосов
/ 09 ноября 2009

У меня есть тест интеграции в моем приложении Grails, который не проходит, когда я пытаюсь сохранить объект типа Member

invitingMember.save(flush: true)

Это вызывает следующее исключение

org.hibernate.AssertionFailure: коллекция [com.mycompany.facet.Facet.channels] было не обрабатывается flush () в com.mycompany.member.MemberConnectionService.addOrUpdateContact (MemberConnectionService.groovy: 939)

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

Ответы [ 4 ]

8 голосов
/ 09 ноября 2009

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

3 голосов
/ 04 января 2012

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

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

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

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

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

2 голосов
/ 30 января 2015

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

  • В моем случае коллекция всегда возвращается с select.
2 голосов
/ 10 ноября 2009

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

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

...