使用Springs事务管理与使用hibernate的好处
我一直在努力学习spring和hibernate,并且我已经在网络上使用了很多例子来组合一个很好的应用程序。 但是,我现在意识到Spring支持事务管理。 在我的春季应用程序中,我只是简单地做了我想要的任何电话,直接进入hibernate状态。 人们为什么要使用Spring的事务管理/数据库内容是否有原因/好处?
真正的优点是:
-
轻量级声明语法。 相比:
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); }
-
exception情况下自动回滚
spring的参考文献非常清楚地提到了这一点
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来抽象出来。
- Hibernate Criterion IN第1000条分手
- sessionfactory.openSession()和sessionfactory.openStatelessSession()之间的区别?
- Hibernate unsaved-value注释
- 如何强制Hibernate返回空值而不是null?
- 创建名为’sessionFactory’的bean时出错:MalformedParameterizedTypeException
- 事务注释在Spring Boot中不起作用
- 调用entityManager.getTransaction()时的EJBException
- 如何使用Hibernate(EntityManager)或JPA 2调用Oracle函数或过程
- 一个JPQL查询中的多个连接提取