- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用带注释的 JPA2 和 EclipseLink,我想知道两者之间是否有区别
EntityManager em = ...
// Some action
em.joinTransaction();
em.close();
和
EntityManager em = PU.entityManager();
em.getTransaction().begin();
// Some action
em.getTransaction().commit();
em.close();
我一般应该更喜欢哪一个?
最佳答案
EntityManager.joinTransaction
用于 JTA 事务(意味着持久性单元配置为使用 JTA 事务),而 EntityTransaction.begin
旨在用于资源本地实体管理器(意味着不使用 JTA 来管理事务)。因此,它们都适用于不同的场景。
第一种情况,即 EntityManager.joinTransaction
很少使用,因为当您需要 JTA 事务支持时,您经常会注入(inject)容器管理的 EntityManager
实例。容器管理的 EntityManager 被注入(inject)(使用 @PersistenceContext
注释)到现有 JTA 事务(由容器管理)的上下文中,因此不需要显式加入事务。仅当出现应用程序管理的 EntityManager 时,您才需要加入现有事务。应用程序管理的 EntityManager 不是由容器注入(inject)的;相反,容器只能注入(inject)一个 EntityManagerFactory
实例(使用 @PersistenceUnit
注释),应用程序使用该实例来获取 EntityManager
实例。
在第二种情况下,即EntityTransaction.begin
,不会使用 JTA 事务来确定任何事务工作的范围。相反,事务是资源本地的,因为对持久性上下文所做的任何更改都将作为原子单元进行跟踪,直到调用 EntityTransaction.commit 为止。人们很少会在 Java EE 应用程序中使用资源本地实体管理器,因为您通常希望 EJB(和 EJB 容器)来划分事务边界,而不是应用程序源代码。此外,使用资源本地事务执行的任何事务工作都不会被可能已经启动的 JTA 事务跟踪,从而导致应用程序中的事务 Activity 出现模糊、困惑和不明确的行为。
关于java - getTransaction().begin()/.commit() 和 joinTransaction() 与 JPA2/EclipseLink 之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7326173/
我之前使用过应用程序管理的 RESOURCE-LOCAL 事务,但现在我想使用容器管理的 JTA 事务。当我使用 @Stateless 时,一切似乎都正常,但是一旦我使用 @Stateful,我就会收
我一直在尝试按照文档 Drools-Flow-Persistence 配置持久性以在 JBOSS 6.0.0.Final 上使用 drools 流但我一直收到如下异常(尽管 hibernate 确实创
我正在使用带注释的 JPA2 和 EclipseLink,我想知道两者之间是否有区别 EntityManager em = ... // Some action em.joinTransaction(
我是一名优秀的程序员,十分优秀!