grails sessionFactory.currentSession.flushMode не работает с потоком? - PullRequest
2 голосов
/ 15 марта 2011

В Grails у нас есть следующий конфиг:

DataSource.groovy: hibernate { flush.mode="commit" }

, который печатает «COMMIT», когда мы регистрируем его в транзакционном контексте: println "session=${sessionFactory.currentSession.flushMode}"

но когда мы создаем новый поток

, это печатает "AUTO".

Кажется, что новый поток получает другие настройки гибернации, то есть базу данных, имя пользователя и фабрику, но текущий сеанс нене принимайте настройку flush.mode.

Кто-нибудь может посоветовать?

1 Ответ

1 голос
/ 16 марта 2011

Вы используете плагин Quartz?

Кварц меняет режим промывки: https://fisheye.codehaus.org/browse/~raw,r=41198/grails-plugins/grails-quartz/tags/LATEST_RELEASE/src/java/org/codehaus/groovy/grails/plugins/quartz/listeners/SessionBinderJobListener.java

public void jobToBeExecuted(JobExecutionContext context) {
    Session session = SessionFactoryUtils.getSession(sessionFactory, true);
session.setFlushMode(FlushMode.AUTO);
    TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session));
    if( LOG.isDebugEnabled()) LOG.debug("Hibernate Session is bounded to Job thread");
}

Временное решение: изменить режим промывки в задании:

        def sessionFactory
        .
        .
        .
        def session=SessionFactoryUtils.getSession(sessionFactory, false)
        session?.setFlushMode(FlushMode.COMMIT)
...