hibernate - withTransaction 和 withNewTransaction 有什么区别?

标签 hibernate grails transactions grails-2.0

以下操作有什么区别?

def someAction() {
  User.withTransaction { ... } 
}


def someAction() {
  User.withNewTransaction { ... }
}
  • 我什么时候用什么?
  • 当 grails 操作仅包含一个事务块时。在这种情况下,我猜 withTransaction 和 withNewTransaction 是相同的,因为每个操作都有自己的事务。这是真的?
  • 最佳答案

    我相信这些功能与事务隔离语义有关。 withTransaction如果一个事务已经开始,函数将参与一个现有的事务,否则将开始一个新的事务。 withNewTransaction方法将始终启动一个新事务,无论是否已经启动,将该块内的代码隔离到它自己的事务中(具有自己的提交/回滚)。
    如果您认为您正在开发的方法应该或可以参与一些具有多个单独数据库写入的更大事务,那么您应该使用 withTransaction以便您可以在必要时参与更大的交易。如果您希望在另一个事务正在进行时您的写入与其他数据库写入完全隔离(并且如果此代码失败,则不会回滚该其他事务),然后使用 withNewTransaction .
    关于您的问题二,如果这两个是在操作中进行的唯一调用,则它们的行为将相同,因为它们都将启动一个新事务。

    关于hibernate - withTransaction 和 withNewTransaction 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17994372/

    相关文章:

    java - 使用 hibernate 将 XML 保存到 mysql

    hibernate - 何时向命名查询添加标量

    java - 替换 spring/hibernate 项目中的 import.sql 文件

    Grails 将字符串转换为字母大小写

    grails - Grails 3-操作web.xml

    database - 使用存储函数创建数据库

    php - 在 PHP 中使用带有循环的 MySQL 事务时出现问题

    java - 如果我在更新期间将 json 中的空 id 传递给子实体,为什么 Hibernate 会插入新记录

    grails - 在运行时编译用户输入的Groovy脚本

    jakarta-ee - 跨 WebLogic WorkManager 线程共享事务(使用 CommonJ)