如何将Hibernate会话绑定到Grails中的线程?
我正在用Grails编写一个多线程应用程序,其他线程需要访问GORM/Hibernate。当他们试图访问GORM时,我得到错误“org.hibernate.HibernateException:没有绑定到线程的hibernate会话,并且配置不允许在此创建非事务会话”如何将Hibernate会话绑定到Grails中的线程?,grails,gorm,hibernate-session,Grails,Gorm,Hibernate Session,我正在用Grails编写一个多线程应用程序,其他线程需要访问GORM/Hibernate。当他们试图访问GORM时,我得到错误“org.hibernate.HibernateException:没有绑定到线程的hibernate会话,并且配置不允许在此创建非事务会话” 好吧,很公平,有人能告诉我设置线程访问的最佳方法吗?这个错误消息听起来像是您只需要更改一些配置选项,但我感觉,它并不是那么简单…您需要将任何GORM调用放入withTransaction闭包中。下面是一个关于多线程的讨论示例:
好吧,很公平,有人能告诉我设置线程访问的最佳方法吗?这个错误消息听起来像是您只需要更改一些配置选项,但我感觉,它并不是那么简单…您需要将任何GORM调用放入withTransaction闭包中。下面是一个关于多线程的讨论示例: 单螺纹
user = User.findByUsername( photo.username )
多线程
User.withTransaction{
user = User.findByUsername( photo.username )
}
Grails应用程序中有一个名为“persistenceInterceptor”的bean可以用于此目的 有关如何使用JMS插件,请参见此示例: 以下是界面: 和Hibernate impl:
withNewSession也将起作用。在我的情况下,我有低优先级的更新,最后一次更新总是“赢”<代码>版本:false在这里也很重要,以避免StaleObjectException:
Thread.start {
try {
Widget.withNewSession {
xxx()
log.info "Asynchronously did some updates."
}
} catch (Exception ex) {
log.error "Failed to asynchronously do something...", ex
}
}
第二个链接断了,位置改变了吗?这可能是偶尔使用线程的最简单方法。这就是我一直在寻找的答案。如果您在后台进行一些更新,并且希望在更新时显示这些更新,那么使用
with transaction
要比使用要好得多。