我使用Grails Hibernate事务在Controller Action中执行以下操作:
user.save(flush:true)
User.withTransaction {
user.name = "newName"
user.save(flush: true)
}
Hibernate / Grails在这种情况下做了什么?当我在第一次刷新时刷新hibernate会话时,withTransaction是否会创建一个新会话,还是会在一个会话中附加两个保存?
答案 0 :(得分:4)
如果它处于控制器动作中,那么自从OpenSessionInView拦截器在请求开始时为您启动时,将会打开一个Hibernate会话。 withTransaction
调用使用当前线程本地会话。
请注意,事务将刷新会话,因此不需要显式执行。另请注意,您确实不应该使用事务和其他持久性(或业务)逻辑来污染控制器代码 - 此代码应该采用事务性服务方法。