2011-03-15 84 views
2

Grails中,我們有以下配置:grails sessionFactory.currentSession.flushMode不適用於線程?

DataSource.groovy的:

 
hibernate { 
    flush.mode="commit" 
} 

它打印「提交」時,我們記錄它在事務上下文:

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

,但是當我們創建一個新的線程

這打印「自動」。

新線程似乎得到其他休眠設置,即數據庫,用戶名和工廠,但currentSession不採取flush.mode設置。

任何人都可以建議嗎?

回答

1

您使用的是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) 
+0

我們沒有使用石英 - 但可能會做一個「戰術修復「,如你所建議 - 在每個線程上設置flushMode。在我標記問題之前將等待一天左右 - 其他人可能已經解決了問題。 – Alex 2011-03-16 09:53:26