2011-04-14 62 views
0

我正在使用Spring Framework 3.0.5和Hibernate Framework 3.6開發一個web應用程序,我有一些問題。我使用帶註釋的事務管理。 (@Transactional),我的DAO是用普通的Hibernate 3 API編寫的。使用Spring,Hibernate和mySQL進行事務管理,額外的問題(使用沒有事務的休眠..)

1)我怎樣才能注意到事務回滾? (我的意思是,我必須捕獲異常?或者或許檢查後,如果一切正常?周圍@用的try-catch事務的方法似乎並不像一個很好的事情對我來說)

2)它是正確的,當我捕獲異常時,使用@transactional進行事務管理不起作用(而不是回滾)? (當我用try-catch圍繞交易方法的調用時)

3)是否可以在不使用事務的情況下使用Hibernate?所以我可以使用Spring與Hibernate,但沒有事務管理?

4)如果在不使用事務的情況下不能使用Hibernate,這意味着我的數據庫管理系統必須始終支持事務引擎(如InnoDB)。我不能使用myISAM表與休眠呢?那會是hibernate的一大缺點呢!

謝謝:-)如果運行時異常是從與@Transactional註釋的方法拋出

回答

3
  1. ,Spring將自動回滾事務。您通常不關心它是否回滾,因爲異常會傳播到調用堆棧。如果您確實需要知道事務是否回滾,請使用TransactionAspectSupport.currentTransactionStatus().isRollbackOnly()

  2. 否。如果您捕獲事務性方法拋出的運行時異常,則用於運行此方法的事務將回滾。

  3. 不需要。您需要事務來使用Hibernate,這是一件好事。在沒有交易的情況下完成數據庫工作是一種災難。

  4. 是的,你需要一個事務引擎。

+0

謝謝!我只想了解爲什麼人們通常不關心交易是否回滾。例如,當用戶想要註冊並且它不起作用時,事務就會回滾。但由於我不會意識到這一點,我不會通知用戶。我不認爲這是一個好策略。按照您的建議,我將查看「TransactionAspectSupport.currentTransactionStatus()。isRollbackOnly()」。 Id還想知道爲什麼有一篇關於冬眠網頁的文章,它描述瞭如何在沒有事務的情況下訪問數據,如果無法在沒有事務的情況下使用休眠:-) – nano7 2011-04-14 14:42:42

+0

這是我提到的文章。 http://community.jboss.org/wiki/Non-transactionaldataaccessandtheauto-commitmode也許我誤解了一些......?非常感謝! :-) – nano7 2011-04-14 14:43:21

+2

@ nano7:如果沒有異常,那麼事務沒有回滾。如果存在異常,則事務將回滾並且異常將傳播,直到在表示層中處理異常,並且可以通知用戶。如果沒有異常,則無需測試回滾。 – 2011-04-14 16:28:51