grails - 如何将 Hibernate Session 绑定(bind)到 Grails 中的线程?

标签 grails grails-orm hibernate-session

我正在 Grails 中编写一个多线程应用程序,其他线程需要访问 GORM/Hibernate。当他们尝试访问 GORM 时,我收到错误“org.hibernate.HibernateException:没有绑定(bind)到线程的 Hibernate session ,并且配置不允许在此处创建非事务性 session ”。

好吧,公平地说,有人可以指导我设置线程以进行访问的最佳方式吗?错误消息听起来几乎就像您只需要更改一些配置选项但我感觉,它不是那么简单......

最佳答案

Luke Daley给出了正确的答案。不幸的是,链接已更改。因此,我将更新他的答案并提供一个代码示例以使该答案自成一体。
Grails 应用程序中有一个名为 persistenceInterceptor 的 bean。可用于为 Hibernate 初始化持久性上下文/ session 。您可以将 bean 注入(inject)您的 Controller /服务类之一并启动一个新线程,例如使用以下代码片段。

class YourControllerOrService {
    PersistenceContextInterceptor persistenceInterceptor
    
    def someOperation() {
        ...
        Runnable yourTask = { ->
            try {
                if (persistenceInterceptor) {
                    persistenceInterceptor.init()
                }
            
                // execute the hibernate operations here in a transaction,
                // e.g. call a method annotated with @Transactional
                ...
            } catch (Exception e) {
                    log.error('Your error message', e)
            } finally {
                if (persistenceInterceptor) {
                    persistenceInterceptor.flush()
                    persistenceInterceptor.destroy()
                }
            }
        }
        Thread workerThread = new Thread(yourTask)
        workerThread.start()
        ...
    }
}
您将在 Grails JMS plug-in on GitHub 中找到示例性实现。 .
PersistenceContextInterceptor接口(interface)也可以在 GitHub 上找到。

关于grails - 如何将 Hibernate Session 绑定(bind)到 Grails 中的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3556550/

相关文章:

grails - 域对象中的分组约束

javascript - 从js访问插件 Controller

grails - 使用 Grails 处理旧数据库时如何避免自动模式修改?

java - 为什么数据库调用在一些有限的调用后会 hibernate

java - hibernate 不设置别名和 oracle 抛出 `ORA-00918: column ambiguously defined` 错误

unit-testing - Grails:单元测试中的NPE

mongodb - 使用 GORM 获取 Mongo 集合时,找不到能够从类型 java.lang.Double 转换为类型 java.lang.Long 的转换器

mongodb - Grails 文档中的自定义事件监听器示例

grails - GORM,一对多一次保存整个对象图不起作用,bug在哪里?

hibernate - 调试 Hibernate session /事务错误的好主意?