2009-11-09 2 views
12

У меня есть тест интеграции в моем приложении Grails, что терпит неудачу, когда я пытаюсь сохранить объект типа MemberHibernate/GORM: коллекция не была обработана Flush()

invitingMember.save(flush: true) 

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

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

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

ответ

6

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

+1

Я уверен, что при использовании GORM (ORM, используемого Grails, который построен "поверх" Hibernate), кавычки по умолчанию каскадируются. –

1

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

Там есть проблема в JIRA, связанных с этим, которое было назначено на Grails 1.2

+0

Нет, я не использую никаких событий –

3

Я нашел возможное решение here.

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

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

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

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

1

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

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