2014-10-06 155 views
0

嗯,我可能在這個問題上可能是錯誤的,但我需要你的寶貴意見/建議站在正確的道路上。春季交易管理計劃 - AOP和@Transactional

我想知道更好最好的方式來處理Spring + Hibernate事務管理,並且每個Spring + JDBCTemplate和利弊。

一些方案/方法,我知道這樣做是:

1)@Around Spring事務管理使用AOP註解@Aspect@PointCut與建議像@Before@After等)。

問題-1:我早先用Spring AOP做了一個Logging示例,但是我對於爲Transaction Management做同樣的事情沒有任何線索。交易開始,回滾和提交將在該方面的類與@Before,@After,@Around建議?請爲此分享一些代碼示例/代碼片段。

問題 - 2:是否需要的Hibernate事務管理強烈,或沒有它也實現了這個方法呢?

2)Spring的事務管理器@Transactional註釋:另一個涉及的Hibernate事務管理聲明式事務管理與@Transactional註釋事務管理方案。

問題 - 3:一個方法使用@Transactional註釋確保在方法體中所有的事務管理,但你將如何管理與這種方式在不同的實體多DAO運行在特定的方法中的回滾功能?假設你正在做3-4種不同的DAO操作(在不同的DAO方法中使用@Transactional),並且在第3個DAO操作中發生了一些異常,你將如何回滾。

請分享您的看法!

問候,

阿倫

+0

爲什麼要重新發明輪子並嘗試實施自己的交易管理?所以imho選項1不是一個選項。要在事務中使用Spring,您需要一個「PlatformTransactionManager」實現來使用,這取決於您使用哪種持久性機制或者是否需要使用JTA。你的事務邊界應該是服務層而不是單個的dao方法(如果你使用後者,你將有多個事務而不是一個)。 – 2014-10-06 07:14:07

+0

@M。Deinum:這是否意味着沒有像AOP註釋那樣的事務管理:'@之前'和'@之後'或者它不是以這種方式使用它們的正確選擇? – 2014-10-06 07:35:33

+0

你最好的選擇確實是使用@Transactional註解的Spring Transaction Manager。如果您從另一個DAO調用DAO,這兩個事務都沒有問題,則整個事務是原子性的,並且所有調用都會回滾 – paul 2014-10-06 07:47:06

回答

1

認爲你應該使用選項2(例如Spring事務管理的東西),因爲它已經被實施和測試:)。關於'問題3':這取決於您爲所有「事務性」DAO API選擇的傳播策略。請檢查此javadoc @Transactional和「傳播」部分。希望這可以幫助。