圣杯服务抛出异常"org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration d



我有一个包含方法的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会话绑定到线程,并且配置不允许在这里创建非事务性会话"。这很奇怪。我一直相信"@Transactional"将为我提供一个有效的Hibernate会话。所以我在这里有点束手无策了。有人知道是什么问题吗?

在访问数据库之前使用session.open(),通过显式指定close为一个解决方案。伯特·贝克维斯的《Here》也是一个很好的答案。

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

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()
   }
}

相关内容

最新更新