2011-06-15 59 views
9

我在服務層使用了@Transactional。如果我使用@Transactional註釋了兩個更新的服務方法(使用默認設置)並且控制器方法正在調用這兩個方法來執行其操作,那麼這兩個服務方法是否使用相同的事務?Spring @Transactional邊界

看來他們沒有,我正在尋找確認。在我看來,要讓這兩種方法使用相同的事務,我需要在服務中編寫第三種方法,用@Transactional對其進行註釋,然後從那裏調用原來的兩種方法。

回答

12

你說的一切都是正確的,包括如何解決問題。這可能是實施協調所有其他服務的Facade服務的好時機。這樣使用的服務將參與Facade服務的交易。

+1

這是絕對正確的。 – Marcelo 2011-06-15 20:20:49

+1

同意,但它不是一個缺陷,所以我不會稱之爲「問題」。有時候你想調用兩個服務方法,每個方法在自己的事務中運行。例如,假設一個服務電話完成購買,第二個決定根據他們看過的廣告,在用戶的瀏覽器窗口的邊緣顯示哪個廣告。如果廣告邏輯失敗,您不想回滾購買;您想要顯示包含後備廣告的購買完整屏幕。 – gatkin 2011-06-15 20:27:59

+0

@gatkin當然。我的意思是「問題」,意思是「OP在努力」 – hvgotcodes 2011-06-15 20:30:45

0

這聽起來對我來說是正確的。但是你也應該考慮這兩種方法是否應該具有事務傳播的默認設置。請參閱here並決定它是否爲'必需'或'支持'? 示例:@Transactional(propagation = Propagation.REQUIRED)