标题说明了一切:UserTransaction
之间有什么区别?和一个 EntityTransaction
?
我的初步理解是 UserTransaction
在需要 JTA 时使用(例如,对多个事物进行查询),而 EntityTransaction
在仅需要 JPA 时使用(例如,当查询是原子的时)。
这是两者之间的唯一区别还是除此之外还有更多区别?
最佳答案
My rudimentary understanding is that UserTransaction is used when JTA is required (e.g. to do queries on mulitple things), and that EntityTransaction is used when JPA only is required (e.g. when the query is atomic).
基本上是对的,但是你对“多个事物”和“原子”的描述有点奇怪。 JTA 允许开发人员使用分布式事务以原子方式(全有或全无)对多个资源(数据库、JMS 代理等)执行更改。如果只访问一种资源(例如,一个数据库),则不需要 JTA,但事务仍然是原子的(全有或全无)。例如,当您在一个数据库上使用常规 JDBC 事务时就是这种情况。
考虑 UserTransaction
与 EntityTransaction
:
- 如果 JPA 是独立使用的,您可以使用
EntityTransaction
来自己划分事务。 - 如果在与 JTA 集成的托管环境中使用 JPA,则使用
UserTransaction
。EntityManager
将自身 Hook 到 JTA 分布式事务管理器中。我所知道的唯一微妙之处在于变化的齐平。使用EntityTransaction
时,JPA 知道它需要刷新更改。如果使用UserTransaction
控制事务,则需要使用 JTA 注册回调registerSynchronization
,以便在事务完成之前将更改刷新到数据库。如果您将 EJB 与 CMT(容器管理的事务)一起使用,您甚至不需要使用UserTransaction
:应用服务器会为您启动和停止事务。
相关问题:
关于java - UserTransaction 和 EntityTransaction 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3078245/