- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
标题说明了一切: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
:
EntityTransaction
来自己划分事务。UserTransaction
。 EntityManager
将自身 Hook 到 JTA 分布式事务管理器中。我所知道的唯一微妙之处在于变化的齐平。使用 EntityTransaction
时,JPA 知道它需要刷新更改。如果使用 UserTransaction
控制事务,则需要使用 JTA 注册回调 registerSynchronization
,以便在事务完成之前将更改刷新到数据库。如果您将 EJB 与 CMT(容器管理的事务)一起使用,您甚至不需要使用 UserTransaction
:应用服务器会为您启动和停止事务。相关问题:
关于java - UserTransaction 和 EntityTransaction 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3078245/
我注意到有些人使用 EntityTransaction 来持久化实体。我从未使用过它,并且不确定为什么以及在哪些情况下可能需要这种方法。只需在 EntityManager 上调用 persist 方法
我收到此错误: javax.servlet.ServletException: java.lang.IllegalStateException: Exception Description: Cann
标题说明了一切:UserTransaction 之间有什么区别?和一个 EntityTransaction ? 我的初步理解是 UserTransaction 在需要 JTA 时使用(例如,对多个事物
我知道这个查询已在其他讨论中处理过,但我没有将 @Transactional 与 em.getTranstaction.begin() 或任何其他手动事务语句混合。 (使用 glassfish 和 n
我正在以独立模式(由 Hibernate 支持)试验 JPA。我注意到以下代码成功地将数据库值更改为“乱码”: A a = em.find(A.class, 1); a.setA1("garbled"
目标 确认原因是因为尝试在Web容器中使用Container Managed Transaction,并检查我的理解是否正确。 (在下面的示例代码中,实体管理器(非线程安全)被注入(inject)到
请原谅我没有包含一些内容,我是新来的。这是控制台信息 java.lang.IllegalStateException: Exception Description: No transaction is
我正在使用 JPA Toplink-essential 并开发 RESTful Web 应用程序。 首先要提到一件事。 不使用 JTA 所以我的 persistences.xml 被定义为不使用 JT
我正在尝试使用 spring、jpa 2.0 和带注释的 PersistenceContext EntityManager 进行简单的容器管理事务。 下面是我的 app-context.xml(spr
我是一名优秀的程序员,十分优秀!