2

在 grails 中,我们有以下配置:

数据源.groovy:

hibernate {
    flush.mode="commit"
}

当我们在事务上下文中记录它时打印“COMMIT”:

println "session=${sessionFactory.currentSession.flushMode}"

但是当我们创建一个新线程时

这将打印“自动”。

新线程似乎确实获得了其他休眠设置,即数据库、用户名和工厂,但 currentSession 不采用 flush.mode 设置。

任何人都可以建议吗?

4

1 回答 1

1

你在使用 Quartz 插件吗?

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");
}

解决方法是在 Job 中更改刷新模式:

        def sessionFactory
        .
        .
        .
        def session=SessionFactoryUtils.getSession(sessionFactory, false)
        session?.setFlushMode(FlushMode.COMMIT)
于 2011-03-16T06:39:25.400 回答