【问题标题】:Transaction is not accessible when using JTA with JPA-compliant transaction access enabled使用启用了符合 JPA 的事务访问的 JTA 时无法访问事务
【发布时间】:2020-02-16 06:32:15
【问题描述】:

我有一个注入了@PersistenceContext 上下文注释的事务管理器。每次我尝试使用 em.getTransaction().begin 开始事务时,我都会收到错误消息的异常

Transaction is not accessible when using JTA with JPA-compliant transaction access enabled

我知道我应该注入UserTransaction 或使用@Transactional 注释,但我想知道这种行为的原因。

【问题讨论】:

    标签: java hibernate jpa transactions entitymanager


    【解决方案1】:

    我认为你应该注入一个容器管理的事务。

    类似:

    @Resource
    private UserTransaction transaction;
    
    public method() {
      try {
         transaction.begin();
         ...do some persistence...
         transaction.commit();
      } catch (Exception e) {
         transaction.rollback();
      }
    }
    

    如果你不需要这样的控制,你可以在你的方法上使用@Transaction注解。

    希望对你有帮助。

    【讨论】:

    • 它就像一个魅力。
    【解决方案2】:

    我遇到了同样的问题,但问题出在其他地方......

    所以堆栈:我使用的是 Wildfly 服务器、postgresql 和 JPA

    起初,我的 persistence.xml 配置为使用 RESOURCE_LOCAL 事务,例如

    <persistence-unit name="unit" transaction-type="RESOURCE_LOCAL">
    

    我遇到了一个问题,即使该方法被标记为 @Transactional,它在发生错误时也没有进行任何回滚,但保存工作正常。

    于是我决定使用事务类型的 JTA 而不是 RESOURCE_LOCAL 以便容器管理事务。

    当我将我的 persistence.xml 更改为此时,它仍然无法正常工作

    <persistence-unit name="unit" transaction-type="JTA">
        <jta-data-source>java:jboss/datasources/unit</jta-data-source>
    

    并且抛出了这个问题标题中的错误。

    我的问题是,我是如何创建 EntityManager 的,这就是它的定义方式

    @Produces
    @PersistenceContext
    private static EntityManager em = Persistence.createEntityManagerFactory(UNIT_NAME).createEntityManager()
    

    解决方案?我不得不删除注释@PersistenceContext

    附:对于 JTA 事务,不要忘记告诉 wildfly 数据源,例如通过这样的 CLI

    data-source add --jndi-name=java:jboss/datasources/unit --name=MyDb --connection-url=jdbc:postgresql://localhost:5432/postgres  --driver-name=postgresql  --user-name=username --password=password
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2014-07-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多