【问题标题】:Grails Service throwing Exception "org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow ..."Grails服务抛出异常“org.hibernate.HibernateException:没有Hibernate Session绑定到线程,并且配置不允许......”
【发布时间】:2014-06-02 08:54:40
【问题描述】:

我有一个包含方法的 Grails 服务

@Transactional
def method(param1, param2, param3, param4) {
    SomeClass obj = new SomeClass(param1: param1, param2: param2, param3: param3, param4: param4)
    obj.save(flush:true, failOnError:true)
}

该方法静默失败,即使我提供了“failOnError”参数。这已经花了我一些时间来弄清楚,所以我将其更改为:

@Transactional
def method(param1, param2, param3, param4) {
    try {
        SomeClass obj = new SomeClass(param1: param1, param2: param2, param3: param3, param4: param4)
        obj.save(flush:true, failOnError:true)
    } catch (Throwable t) {
        t.printStackTrace()
    }
}

现在,最后,我看到错误消息:“没有 Hibernate Session 绑定到线程,并且配置不允许在这里创建非事务性会话”。这很奇怪。我一直相信“@Transactional”会为我提供一个有效的 Hibernate 会话。所以我在这里有点不知所措。有谁知道问题可能是什么?

【问题讨论】:

    标签: hibernate grails grails-orm


    【解决方案1】:

    在访问数据库之前使用session.open(),并通过明确指定为一种解决方案使用close。还有一个很好的答案细节是Here by Burt Beckwith.

    如果有帮助,请使用他的示例。

    void deviceDisconnected(String mobileId, String wifiIp){
       try {
          UserMobile.withTransaction { tx ->
             def mobile = Mobile.findByMobileId(mobileId)
             def userMobile = UserMobile.findByMobileAndWifiIp(mobile, wifiIp)
             userMobile.action = Constants.MOBILE_STATUS_DISCONNECTED
             userMobile.alarmStatus = Constants.ALARM_STATUS_TURNED_ON
             userMobile.modifiedDate = new Date()
             userMobile.save(flush: true)
          }
       }
       catch(e) {
          e.printStackTrace()
       }
    }
    

    【讨论】:

    • 这样就解决了问题。谢谢你。但我想真正了解发生了什么,并做了一些进一步的研究。原来“@Transactional”不等于“@Transactional”。注释有一个 Spring 版本和一个 Grails 版本 (grails.transaction.Transactional),我使用 Spring 版本而不是 Grails 变体,这是我问题的最初原因。无论如何感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2011-12-12
    相关资源
    最近更新 更多