2014-02-24 137 views
2

我有兩種方法都是@Transactional的註解,並且都執行一些數據庫操作,主要是插入。Spring @Transactional註解問題

我調用的methodB從

了methodA
@Transactional 
public void methodA(){ 
methodB(); 

// Some database Operations 

// some error conditions.... 
throw exception; 
} 

@Transactional 
public void methodB(){ 
// Some database Operations 
} 

所以我要提交的治法和方法b數據庫的事務只有當所有的操作都是成功的。 因此,即使在methodA中遇到異常,methodB中所做的更改仍會被提交。

我想改變MethodB回滾,如果methodA遇到錯誤。

我需要做其他事情嗎?

+0

從你的文章中不太清楚methodA()和methodB()的本質是什麼,但我認爲有人會提到@Transactional註釋最適合服務層中的類的方法 - 你我留下了一些空間來懷疑你是否認爲這些是服務層方法以及有關數據庫操作的評論。但是,當然,服務層將間接在數據庫上運行,所以也許這就是您的意圖。 – unigeek

回答

1

當methodB被methodA調用時,它不會創建一個新的事務,因爲您沒有調用將所有事務創建和回滾進行排序的Spring代理,所以來自methodA和methodB的插入將在同一個事務中執行。

所以,不,你不需要做任何事......