hibernate - Grails的交易范围?

标签 hibernate grails grails-2.0

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

user.save(flush:true)

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

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

最佳答案

如果它是在 Controller Action 中,那么自从OpenSessionInView拦截器在请求开始时就为您启动以来,整个时间都会有一个Hibernate session 打开。 withTransaction调用使用当前的线程本地 session 。

请注意,事务将刷新 session ,因此无需显式执行该操作。还要注意,您实际上不应该使用事务和其他持久性(或业务)逻辑来污染 Controller 代码-此代码应采用事务服务方法。

关于hibernate - Grails的交易范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19908746/

相关文章:

grails - Grails和CXF插件WSDL的第一个方法示例?

grails - Grails 2.1 dateCreated域保存时间歇性地为null

grails - 如何根据拒绝访问的原因使Grails的Spring Security Core呈现不同的页面

mysql - Hibernate Spring 编码字符集错误 [UTF-8]

grails - Grails 3.3:临时属性和GrailsDomainClassProperty

grails - 与其他集成测试一起运行时,Spock 集成测试失败 - 使用集成 :spock 单独成功

unit-testing - Grails:在另一个服务中模拟一个服务及其方法

java - Hibernate:保存多个关联问题

java - 包含外部 jar 中的类的 JPA 实体

java - hibernate - 禁用 MySQLIntegrityConstraintViolationException