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

Joh*_*ker 16 java spring hibernate

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

axt*_*avt 26

真正的优点是:

  • 轻量级声明语法.相比:

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

    @Transactional
    public void saveEmployee(Employee e) {
        sf.getCurrentSession().save(e);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 灵活的交易传播.想象一下,现在您需要将此saveEmployee()方法作为复杂事务的一部分来执行.使用手动事务管理,您需要更改方法,因为事务管理是硬编码的.使用Spring,事务传播可以顺利进行:

    @Transactional
    public void hireEmployee(Employee e) {
        dao.saveEmployee(e);
        doOtherStuffInTheSameTransaction(e);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 异常情况下自动回滚


Ara*_*ram 9

春天的参考文档中提到说得很清楚

Spring Framework为事务管理提供了一致的抽象,具有以下优势:

  • 提供跨不同事务API的一致编程模型,例如JTA,JDBC,Hibernate,JPA和JDO.
  • 支持声明式事务管理.
  • 与许多复杂的事务API(如JTA)相比,为程序化事务管理提供了更简单的API.
  • 与Spring的各种数据访问抽象集成得非常好.

提供跨不同事务API的一致编程模型,例如JTA,JDBC,Hibernate,JPA和JDO.

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

支持声明式事务管理.

与EJB类似

与许多复杂的事务API(如JTA)相比,为程序化事务管理提供了更简单的API.

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

  • @约翰·贝克 - 不,你不是。Spring 的 HibernateTransactionManager(毫不奇怪)使用了 Hibernate 事务的特性,同时保持了 Spring 统一事务抽象的优势。如果您正在使用 Spring 并且正在使用事务,那么您应该使用 Spring 的事务。 (2认同)