Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java UserTransaction和EntityTransaction之间的区别_Java_Jpa_Transactions_Jakarta Ee_Jta - Fatal编程技术网

Java UserTransaction和EntityTransaction之间的区别

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 仅需要(例如,当查询 是原子的) 这基本上是对的,但你对“多种事物”和“原子”的描述有点奇怪。

标题说明了一切:a和a的区别是什么

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

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

我的基本理解是 当使用JTA时使用UserTransaction 必需的(例如,查询 很多事情),还有 在JPA时使用EntityTransaction 仅需要(例如,当查询 是原子的)

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

考虑到
UserTransaction
EntityTransaction

  • 如果JPA是独立使用的,您可以使用
    EntityTransaction
    自己定义事务
  • 如果JPA在与JTA集成的托管环境中使用,则使用
    UserTransaction
    EntityManager
    将自己挂接到JTA分布式事务管理器中。我所知道的唯一微妙之处就是这些变化带来的冲击。当使用
    EntityTransaction
    时,JPA知道它需要刷新更改。如果使用
    UserTransaction
    控制事务,则需要使用JTA注册回调,以便在事务完成之前将更改刷新到数据库。如果您将EJB与CMT(容器管理事务)一起使用,您甚至不需要使用
    UserTransaction
    :应用程序服务器为您启动和停止事务
相关问题:

  • (副本)
  • (相关)

可能重复@ewernli:这有点不公平,如果我一开始就知道这个问题的答案,我才知道这个问题是重复的!问题和答案都没有提到实体交易,我在问之前做了搜索,我完全理解。这也是为什么我花时间尽我所能回答你的问题。这只是SO上的一种常见做法,指出可能的重复,以便人们可以阅读这两个问题的答案,这可以提高SO的质量。这不是批评什么的。只有在有5票表明该问题是“完全重复”的情况下,该问题才被视为“完全重复”。