用户事务和实体事务之间的区别

2022-09-02 01:30:07

Title 说明了一切:用户事务实体事务之间有什么区别?

我的基本理解是,当需要JTA时(例如,对多个事物进行查询),并且当只需要JPA时(例如,当查询是原子查询时),使用它。UserTransactionEntityTransaction

这是两者之间唯一的区别,还是还有更多?


答案 1

我的基本理解是,当需要JTA时使用UserTransaction(例如,对多个事物进行查询),并且当只需要JPA时(例如,当查询是原子时),使用EntityTransaction。

这基本上是对的,但你对“多重事物”和“原子”的描述有点奇怪。JTA允许开发人员使用分布式事务以原子方式(全有或全无)对多个资源(数据库,JMS代理等)执行更改。如果只访问一个资源(例如,一个数据库),则不需要 JTA,但事务仍然是原子的(全有或全无)。例如,当您在一个数据库上使用常规 JDBC 事务时,就是这种情况。

考虑 vs. :UserTransactionEntityTransaction

  • 如果 JPA 是独立使用的,则可以使用自己来划分事务。EntityTransaction
  • 如果在与 JTA 集成的托管环境中使用 JPA,则使用 。这些钩子本身就挂接到 JTA 分布式事务管理器中。我所知道的唯一微妙之处是考虑到变化的齐平。使用时,JPA 知道它需要刷新更改。如果使用 来控制事务,则需要使用 JTA 寄存器同步注册回调,以便在事务完成之前将更改刷新到数据库中。如果您将EJB与CMT(容器托管事务)一起使用,则甚至不需要使用:应用程序服务器为您启动和停止事务。UserTransactionEntityManagerEntityTransactionUserTransactionUserTransaction

相关问题:


答案 2

推荐