2016-11-24 28 views
0

我接受了一次採訪,我被問到一個讓我無語的問題。所以我想也許我可以在這裏提出這個問題,並得到正確的答案。 問題如下。Spring框架中的回滾機制

在Spring中,我們使用hibernate進行數據庫操作。我有一個 Java類,其中有多個對象需要在數據庫中持久保存(可以說3個對象)。現在,我想確定如果第三個對象無法保留,那麼第一個和第二個對象應該回滾。這個行爲應該由 控制Spring框架,問題是Spring如何確保這個 的行爲是否實現?

只是爲了我個人的理解,即使我想確保這種行爲是在hibernate中實現的,我該如何實現這一點?

任何有關此事的幫助將不勝感激。謝謝

+0

看着交易的生命週期,並認爲這是一個有點太難以消化,所以我期待一些簡單的定義,例如「Propagation.REQUIRES_NEW」等參數。問題是,我無法連接點來爲我的問題畫一個清晰的圖片 –

回答

2

閱讀Spring的@Transactional註釋,它如何與AOP代理一起工作,以及如何執行回滾。要引用文檔:

推薦的方法來指示Spring框架的事務 基礎設施事務的工作是被回滾就是 扔從代碼當前在a 上下文中執行一個異常交易。 Spring框架的事務 基礎結構代碼將捕獲任何未處理的異常,因爲它會調用堆棧上的 ,並確定是否標記回滾的 事務。

在其默認配置中,Spring Framework的事務 基礎結構代碼只在運行時標記爲回滾事務 ,未經檢查的異常;也就是說,拋出的異常 是RuntimeException的一個實例或子類。 (錯誤也會 - 默認 - 導致回滾)。檢查從事務性方法拋出的異常 不會導致在默認 配置中回滾。

參考:

@Transactionalhttp://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html#tx-decl-explained

回滾http://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html#transaction-declarative-rolling-back

+0

如果您可以在Hibernate中給出類似的例子,這將會很棒,這會讓事情變得很清楚。即在兩種不同的框架中做同樣的事情。 –