2

Grails には次の構成があります。

DataSource.groovy:

hibernate {
    flush.mode="commit"
}

トランザクションコンテキストでログに記録すると、「COMMIT」が出力されます。

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

しかし、新しいスレッドを作成するとき

これは「AUTO」を印刷します。

新しいスレッドは他の休止状態の設定、つまりデータベース、ユーザー名、ファクトリを取得するように見えますが、currentSession は flush.mode 設定を取得しません。

誰でもアドバイスできますか?

4

1 に答える 1

1

Quartz プラグインを使用していますか?

Quartz はフラッシュ モードを変更します 。 /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)
于 2011-03-16T06:39:25.400 に答える