Почему Grails Searchable Plugin вызывает ошибки в Hibernate AutoFlush? - PullRequest
2 голосов
/ 18 марта 2011

В проекте Grails 1.2.5, который я пытаюсь устранить, мы используем Grails Плагин с возможностью поиска .5.5.1.

Проблема в том, чтовсякий раз, когда мы пытаемся проиндексировать классы доменов больших наборов, Grails продолжает выдавать:

ERROR hibernate.AssertionFailure - произошла ошибка подтверждения (это может указывать на ошибку в Hibernate, но более вероятно из-за небезопасного использованиясеанс) org.hibernate.AssertionFailure: коллекция [domain-class] не была обработана flush ()

Но соответствующие классы домена были сопоставлены и использованы hibernate безпроблемы вне вызовов к поисковому плагину.

Использование поискового плагина происходит следующим образом:

  1. Создание сеанса компаса с compass.openSession()
  2. Начало компасатранзакция: compassSession.beginTransaction()
  3. Затем compassSession.create(result.get(0)) вызывается для важного неиндексированного домена класса
  4. Наконец, compassTransaction.commit() вызывается для фиксации транзакции.
  5. Перейти к 2 и обработатьследующий класс домена

Между 3-м и 4-м классами домена запускается автозапуск, который выдает ошибку.

Может кто-нибудь дать мне какие-либо советы о том, как решить эту проблему?

Кто-нибудь сталкивался с этой проблемой раньше?

Я знаю, что у них была системная проблема с этим назад в версиях до .5 из searchable-plugin. Возможно ли, что эти проблемы не были полностью решены?

1 Ответ

2 голосов
/ 21 марта 2011

Эта статья помогла мне понять это. Вы должны выполнять некоторые запросы Hibernate в сеансе, в котором есть грязные объекты, и они получают flush() в середине модификации.

Иногда можно переместить все запросы только для чтения за пределы транзакции, прежде чем произойдет какое-либо изменение, и внести изменения в withTransaction{}.

...