Grails的交易范围?

时间:2013-11-11 14:27:43

标签: hibernate grails grails-2.0

我使用Grails Hibernate事务在Controller Action中执行以下操作:

user.save(flush:true)

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

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

1 个答案:

答案 0 :(得分:4)

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

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