Java UserTransaction和EntityTransaction之间的区别
标题说明了一切:a和a的区别是什么 我的基本理解是,Java UserTransaction和EntityTransaction之间的区别,java,jpa,transactions,jakarta-ee,jta,Java,Jpa,Transactions,Jakarta Ee,Jta,标题说明了一切:a和a的区别是什么 我的基本理解是,UserTransaction在需要JTA时使用(例如,对多个事物进行查询),而EntityTransaction仅在需要JPA时使用(例如,当查询是原子的) 这是两者之间唯一的区别还是有更多的区别 我的基本理解是 当使用JTA时使用UserTransaction 必需的(例如,查询 很多事情),还有 在JPA时使用EntityTransaction 仅需要(例如,当查询 是原子的) 这基本上是对的,但你对“多种事物”和“原子”的描述有点奇怪。
UserTransaction
在需要JTA时使用(例如,对多个事物进行查询),而EntityTransaction
仅在需要JPA时使用(例如,当查询是原子的)
这是两者之间唯一的区别还是有更多的区别
我的基本理解是
当使用JTA时使用UserTransaction
必需的(例如,查询
很多事情),还有
在JPA时使用EntityTransaction
仅需要(例如,当查询
是原子的)
这基本上是对的,但你对“多种事物”和“原子”的描述有点奇怪。JTA允许开发人员使用分布式事务在多个资源(数据库、JMS代理等)上原子地执行更改(全部或全部)。如果只访问一个资源(例如,一个数据库),则不需要JTA,但事务仍然是原子的(全部或无)。例如,在一个数据库上使用常规JDBC事务时就是这种情况
考虑到UserTransaction
与EntityTransaction
:
- 如果JPA是独立使用的,您可以使用
自己定义事务EntityTransaction
- 如果JPA在与JTA集成的托管环境中使用,则使用
。UserTransaction
将自己挂接到JTA分布式事务管理器中。我所知道的唯一微妙之处就是这些变化带来的冲击。当使用EntityManager
时,JPA知道它需要刷新更改。如果使用EntityTransaction
控制事务,则需要使用JTA注册回调,以便在事务完成之前将更改刷新到数据库。如果您将EJB与CMT(容器管理事务)一起使用,您甚至不需要使用UserTransaction
:应用程序服务器为您启动和停止事务UserTransaction
- (副本)
- (相关)