1

我使用 Grails Hibernate 事务在控制器操作中执行以下操作:

user.save(flush:true)

User.withTransaction {
  user.name = "newName"
  user.save(flush: true)
}

在这种情况下,Hibernate/Grails 做了什么?当我在第一次刷新时刷新休眠会话时,withTransaction 是创建一个新会话还是将两个保存附加到一个会话中?

4

1 回答 1

4

如果它在控制器操作中,那么将会有一个 Hibernate 会话一直打开,因为 OpenSessionInView 拦截器在请求开始时为您启动它。该withTransaction调用使用当前线程本地会话。

请注意,事务将刷新会话,因此无需显式执行。另请注意,您真的不应该用事务和其他持久性(或业务)逻辑污染控制器代码 - 此代码应该在事务服务方法中。

于 2013-11-11T16:15:20.633 回答