【问题标题】:Difference between UserTransaction and EntityTransactionUserTransaction 和 EntityTransaction 之间的区别
【发布时间】:2011-03-05 22:17:37
【问题描述】:

标题说明了一切:UserTransactionEntityTransaction 有什么区别?

我的初步理解是,UserTransaction 用于需要 JTA 时(例如查询多个事物),EntityTransaction 用于仅需要 JPA 时(例如查询是原子的)。

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

【问题讨论】:

  • @ewernli :这有点不公平,如果我一开始就知道这个问题的答案,我只会知道那个问题是重复的!问题和答案都没有提到EntityTransaction - 我在询问之前进行了搜索。
  • 我完全明白这一点。这也是我花时间尽我所能回答你的问题的原因。指示可能重复的 SO 只是一种常见做法,以便人们可以阅读这两个问题的答案,它提高了 SO 的质量。这不是批评或任何东西。仅当有 5 票将其标记为完全重复时,该问题才会“作为完全重复而关闭”。

标签: java jpa transactions jakarta-ee jta


【解决方案1】:

我的初步理解是 使用 JTA 时使用 UserTransaction 需要(例如查询 多件事),那 JPA时使用EntityTransaction only 是必需的(例如,当查询 是原子的)。

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

考虑UserTransactionEntityTransaction

  • 如果 JPA 是独立使用的,您可以使用EntityTransaction 自行划分事务。
  • 如果在与 JTA 集成的托管环境中使用 JPA,则使用 UserTransactionEntityManager 将自己挂接到 JTA 分布式事务管理器中。我所知道的唯一微妙之处在于变化的同步性。当使用EntityTransaction 时,JPA 知道它需要刷新更改。如果事务使用UserTransaction 控制,则需要使用JTA registerSynchronization 注册一个回调,以便在事务完成之前将更改刷新到数据库中。如果您将 EJB 与 CMT(容器管理事务)一起使用,您甚至不需要使用 UserTransaction:应用服务器会为您启动和停止事务。

相关问题:

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 2021-12-25
    • 2020-05-10
    • 2014-09-20
    • 2010-10-28
    • 2015-10-04
    • 2012-08-12
    • 2011-02-18
    相关资源
    最近更新 更多