2011-02-09 25 views
14

我一直在努力學習Spring和Hibernate,並且我在網絡中使用了很多示例來組合一個很好的應用程序。不過,我現在意識到Spring支持事務管理。在我的春季應用程序中,我只是簡單地撥打我想要的任何電話,直接進入休眠狀態。對於人們爲什麼要使用Spring的事務管理/數據庫,有什麼理由/好處嗎?使用彈簧事務管理與使用休眠模式的好處

+1

的情況:隨着春天,事務傳播工程進展順利。否則選擇你想使用的那個。 – 2011-02-09 03:11:15

+0

如果我可能會問,什麼是兩階段提交? – 2011-02-10 04:16:22

回答

24

真正的優點是:

  • 輕量級聲明語法。比較:

    public void saveEmployee(Employee e) { 
        Session s = sf.getCurrentSession();  
        s.getTransaction().begin(); 
        s.save(e);  
        s.getTransaction().commit(); 
    } 
    

    @Transactional 
    public void saveEmployee(Employee e) { 
        sf.getCurrentSession().save(e); 
    } 
    
  • 靈活的事務傳播。想象一下,現在你需要執行這個saveEmployee()方法作爲複雜事務的一部分。通過手動事務管理,您需要更改方法,因爲事務管理是硬編碼的。使用Spring - 您是否使用兩個階段提交到數據庫以及到別的地方

    @Transactional 
    public void hireEmployee(Employee e) { 
        dao.saveEmployee(e); 
        doOtherStuffInTheSameTransaction(e); 
    } 
    
  • 自動回滾異常

8

spring's reference doc提到它很清楚

Spring框架提供了交易 管理 統一的抽象層,提供以下 好處:

  • 爲不同的事務 一致的編程模型API如JTA,JDBC,Hibernate, JPA和JDO。
  • 支持聲明式事務管理。
  • 爲諸如JTA之類的複雜事務 API提供了用於編程事務管理的更簡單的API 。
  • 非常適合Spring的各種數據訪問抽象。

爲不同的事務 API,例如JTA,JDBC,Hibernate的, JPA,JDO和一致的編程模型。

讓我們假設您目前正在使用hibernate api進行事務管理,並且隨時可能需要切換到JDO。這需要更改交易管理代碼。如果你使用Spring,那麼沒有改變。

支持聲明式事務管理。

到EJB

提供的編程式事務管理 一個簡單的API多了一些複雜的交易 API,例如JTA的相似。

JTA和JDBC有不同的API用於事務管理。 Spring通過提供統一的API來抽象出它。

+0

是的,但實際上我不確定這意味着什麼。在Spring上使用Spring的事務管理是否是標準做法?您是否錯過了以這種方式使用hibernate的一些好處? – 2011-02-09 02:58:18