【问题标题】:EntityManager nested transaction atomicityEntityManager 嵌套事务原子性
【发布时间】:2015-07-13 10:05:53
【问题描述】:

在遗留代码中,我解决了嵌套事务的问题。 (Spring、CDI等不能只用纯JPA(EclipseLink))

em.getTransaction().begin();
em.persist(client);

em2.getTransaction().begin();
em2.persist(client1);            //saved into DB
em2.getTransaction().commit(); 

em.getTransaction().rollback();


public void method(){
    EntityManager em = entityManagerFactory.createEntityManager();
    em.getTransaction().begin();
    em.persist(client);

    nestedTransactionMethod();

    em.getTransaction().rollback();
}

public void nestedTransactionMethod(){
    EntityManager em = entityManagerFactory.createEntityManager();
    em.getTransaction().begin();
    em.persist(client);
    em.getTransaction().commit();
}

问题是当我在打开事务的内部方法调用另一个具有自我事务的方法时,它的行为不是原子的。是否有任何解决方案如何在不提供开放实体管理器作为参数的情况下实现这一目标?

【问题讨论】:

    标签: java jakarta-ee jpa transactions eclipselink


    【解决方案1】:

    JPA 和 JTA 不支持嵌套事务。

    当您需要一个整体的交易管理系统时。比使用一个。 有很多可能性。 Spring 是其中之一,或者是应用服务器中的 JavaEE 容器管理系统。 您还可以使用符合 JTA 的事务管理器自行处理整个操作。我告诉你,作为一个基于 Jboss TM 编写分布式事务管理系统的人 -> 不要这样做,这并不容易,而且会花费大量时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 2019-08-05
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多