2011-08-23 80 views
5

在我的應用程序中,有多個步驟,其中許多提交到數據庫的提交將通過多個方法按順序進行。 實施例:使用Spring和休眠的嵌套事務

A -> B -> C 
     -> D 
      ->E 
     -> F 
    -> G 

A調用B,其調用℃。然後B調用D. d調用E等。所有這些方法都有一些數據庫操作。 據我所知PROPAGATION_REQUIRED(聲明式交易管理 - 春季推薦的方式),如果E成功完成,交易(和E將被提交)。現在,由於一些例外,F應該導致回滾。我想要所有東西回滾從A做起。 這是可能通過聲明性交易管理?或者我應該使用程序化事務管理?

謝謝。

回答

7

首先,「嵌套」事務,即存在多個依賴於彼此的正在運行的事務,不受支持,afaik。

然後,propagation=REQUIRED意味着與該傳播的所有方法將:

  • 如果沒有,則存在
  • 參加現有的事務,如果例如存在啓動一個新的事務。

這意味着,在您的情況,在F失敗會回滾整個事務處理(因爲它是一個單一的交易,通過A開始,並傳播到其他方法)

+0

我將與你已經完全同意直到我讀完(某處 - 無法找到它的位置),只要該方法完成,就立即進行提交。我認爲我在這裏的理解是錯誤的。實際提交什麼時候發生(我們不必明確這麼做,對吧?)? –

+1

當啓動事務的方法完成時,會發生提交。它在這種情況下是'A' – Bozho

+0

沒問題。大。非常感謝。 –