使用Springs事务管理与使用hibernate的好处

时间:2011-02-09 02:48:49

标签: java spring hibernate

我一直在努力学习spring和hibernate,并且我已经在网络上使用了很多例子来组合一个不错的应用程序。但是,我现在意识到Spring支持事务管理。在我的春季应用程序中,我只是简单地做了我想要的任何电话,直接进入休眠状态。有人为什么会使用Spring的事务管理/数据库内容的原因/好处?

2 个答案:

答案 0 :(得分:25)

真正的优势是:

  • 轻量级声明性语法。比较:

    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);
    }
    
  • 异常情况下的自动回滚

答案 1 :(得分:9)

spring's reference doc非常清楚地提到

  

Spring Framework提供了一个   交易的一致抽象   提供以下服务的管理层   好处:

     
      
  • 跨不同的事务提供一致的编程模型   诸如JTA,JDBC,Hibernate之类的API,   JPA和JDO。
  •   
  • 支持声明式事务管理。
  •   
  • 为程序化事务管理提供更简单的API   比一些复杂的交易   诸如JTA之类的API。
  •   
  • 与Spring的各种数据访问抽象集成得非常好。
  •   

跨不同的事务提供一致的编程模型  诸如JTA,JDBC,Hibernate之类的API,  JPA和JDO。

我们假设您正在使用hibernate api进行事务管理,并且有时您希望切换到JDO。这需要更改事务管理代码。如果你使用Spring,则没有变化。

支持声明式事务管理。

与EJB类似

为程序化事务管理提供更简单的API 比一些复杂的交易 诸如JTA之类的API。

JTA和JDBC有不同的API用于事务管理。 Spring通过提供统一的API来抽象出来。