Can I use Hibernate with JTA?

9
如果JTA是一个API,那么我能使用Hibernate作为JTA的实现吗?
我有一个使用Spring和Hibernate的应用程序,我想知道哪个框架应该负责事务处理,是Spring还是Hibernate?

1
Spring注解应该是您的首选。选择对您的部署有意义的事务管理器。 - duffymo
1
Hibernate不处理事务,而是由事务管理器来处理。您设置一个事务管理器,并且在Session上调用该方法只是将其委托给此事务管理器。Spring也是如此(http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/PlatformTransactionManager.html)。通常使用的实际事务管理器只是数据源的事务管理器-它在JDBC连接上设置事务。更通用的方法是JTA。 - Boris the Spider
事务管理器是JTA的一部分(类似于JPA中的entityManager)吗? - user3528733
1
不,事务管理器是适配器模式 - 它将各种事务框架适应到手头的框架中。JTA就是这样的框架之一。JDBC也有事务。 - Boris the Spider
好的,但是我可以像使用JTA一样使用Hibernate吗(类似于使用Hibernate的JPA实现)? - user3528733
1个回答

22

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,则不会出现这种情况。


好的,感谢您提供全面的答案。您能解释一下RESOURCE_LOCAL是什么吗? - user3528733
5
这是关于JDBC连接事务支持的内容。JDBC连接具有提交/回滚方法,以控制一个数据库事务。RESOURCE_LOCAL每个事务只能使用一个数据源,而JTA可以将全局事务分布在多个数据源上。 - Vlad Mihalcea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接