繁体   English   中英

withTransaction 和 withNewTransaction 有什么区别?

[英]What is the difference between withTransaction and withNewTransaction?

以下操作有什么区别?

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

def someAction() {
  User.withNewTransaction { ... }
}
  1. 我什么时候用什么?

  2. 当 grails 操作仅包含一个事务块时。 在这种情况下,我猜 withTransaction 和 withNewTransaction 是相同的,因为每个操作都有自己的事务。 这是真的?

我相信这些功能与事务隔离语义有关。 如果一个事务已经开始, withTransaction函数将参与一个现有的事务,否则将开始一个新的事务。 withNewTransaction方法将始终启动一个新事务,无论是否已经启动,将该块内的代码隔离到它自己的事务中(具有自己的提交/回滚)。

如果您认为您正在开发的方法应该或可以通过多个单独的数据库写入参与一些更大的事务,那么您应该使用withTransaction以便您可以在必要时参与更大的事务。 如果您希望在另一个事务正在进行时您的写入与其他数据库写入完全隔离(并且如果此代码失败,则不会回滚该其他事务),然后使用withNewTransaction

关于您的问题二,如果这两个是在操作中进行的唯一调用,则它们的行为将相同,因为它们都将启动一个新事务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM