grails sessionFactory.currentSession.flushMode 不适用于线程?

发布于 2024-10-22 06:06:19 字数 425 浏览 1 评论 0原文

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

DataSource.groovy: <代码>

hibernate {
    flush.mode="commit"
}

当我们将其记录在事务上下文中时,它会打印“COMMIT”: <代码>

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

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

它会打印“AUTO”。

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

有人可以建议吗?

In grails we have the following config:

DataSource.groovy:

hibernate {
    flush.mode="commit"
}

which prints "COMMIT" when we log it in a transactional context:

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

but when we create a new thread

this prints "AUTO".

New thread does seem to get the other hibernate settings, ie database, username and factory, but the currentSession doesn't take the flush.mode setting.

Can anyone advise?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静若繁花 2024-10-29 06:06:19

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

Are you using the Quartz plugin?

Quartz changes the flush mode:
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");
}

The workaround is to change the flush mode in the Job:

        def sessionFactory
        .
        .
        .
        def session=SessionFactoryUtils.getSession(sessionFactory, false)
        session?.setFlushMode(FlushMode.COMMIT)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文