gpt4 book ai didi

java - EntityManager 嵌套事务原子性

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:44:32 24 4
gpt4 key购买 nike

在遗留代码中,我解决了嵌套事务的问题。(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();
}

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

最佳答案

JPA 和 JTA 不支持嵌套事务。

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

关于java - EntityManager 嵌套事务原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30023048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com