簡體   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