使用弹簧事务管理与使用休眠相比的好处
我一直在尝试学习春季和冬眠,并且我已经使用了很多围绕网络的示例来构建一个不错的应用程序。但是,我现在意识到Spring支持事务管理。在我的春季应用程序中,我只是简单地拨打任何我想打的电话,直接进入休眠状态。为什么人们会使用Spring的事务管理/数据库的东西,有什么原因/好处吗?
我一直在尝试学习春季和冬眠,并且我已经使用了很多围绕网络的示例来构建一个不错的应用程序。但是,我现在意识到Spring支持事务管理。在我的春季应用程序中,我只是简单地拨打任何我想打的电话,直接进入休眠状态。为什么人们会使用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);
}
灵活的事务传播。想象一下,现在您需要将此方法作为复杂事务的一部分来执行。使用手动事务管理,您需要更改方法,因为事务管理是硬编码的。借助 Spring,事务传播可以顺利进行:saveEmployee()
@Transactional
public void hireEmployee(Employee e) {
dao.saveEmployee(e);
doOtherStuffInTheSameTransaction(e);
}
异常情况下的自动回滚
春天的参考文档非常清楚地提到它
Spring框架为事务管理提供了一致的抽象,具有以下优点:
- 跨不同的事务 API(如 JTA、JDBC、Hibernate、JPA 和 JDO)提供一致的编程模型。
- 支持声明式事务管理。
- 为编程事务管理提供了比许多复杂的事务 API(如 JTA)更简单的 API。
- 与Spring的各种数据访问抽象很好地集成在一起。
跨不同的事务 API(如 JTA、JDBC、Hibernate、JPA 和 JDO)提供一致的编程模型。
假设您当前正在使用休眠 API 进行事务管理,并且将来需要切换到 JDO。这需要更改事务管理代码。如果您使用Spring,则不会有任何变化。
支持声明式事务管理。
与 EJB 类似
为编程事务管理提供了比许多复杂事务 API(如 JTA)更简单的 API。
JTA 和 JDBC 有不同的事务管理 API。Spring通过提供统一的API来抽象出来。