如果JTA是一个API,那么我能使用Hibernate作为JTA的实现吗?
我有一个使用Spring和Hibernate的应用程序,我想知道哪个框架应该负责事务处理,是Spring还是Hibernate?
我有一个使用Spring和Hibernate的应用程序,我想知道哪个框架应该负责事务处理,是Spring还是Hibernate?
Hibernate不是JTA的实现,而是JPA的实现。
JTA是企业级事务规范,由Java EE提供商或独立事务管理器(例如Bitronix)实现。
Hibernate提供了一个Transaction API抽象,因为ORM工具使用事务性的写入后持久化上下文。
Spring提供了一个事务管理抽象,允许您通过一些微小的配置更改从RESOURCE_LOCAL
切换到JTA
事务。
Spring还成功地在Hibernate/JPA Transaction API抽象之上进行了整合。
如果您使用Spring,则应该利用其事务管理抽象,这样就不必使用Hibernate/JPA事务API。
因为Spring使用AOP,所以事务管理与业务逻辑分离,而如果您使用编程式Hibernate/JPA事务API,则不会出现这种情况。
Session
上调用该方法只是将其委托给此事务管理器。Spring也是如此(http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/PlatformTransactionManager.html)。通常使用的实际事务管理器只是数据源的事务管理器-它在JDBC连接上设置事务。更通用的方法是JTA。 - Boris the Spider