当前位置: 首页 > 知识库问答 >
问题:

单例中具有上下文类型事务的EntityManager会加入外部bean管理的事务吗?

颛孙飞鸾
2023-03-14
@Singleton
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class PersistenceSingleton {

    @PersistenceContext(unitName = "test", type = PersistenceContextType.TRANSACTION)
    private EntityManager em;

    public void doStuff() {

        // perform actions with the entity manager that imply changes in the database

    }

}
@Singleton
@TransactionManagement(TransactionManagementType.BEAN)
public class PersistenceFacade {

    @EJB
    private PeristenceSingleton ps;

    @Resource
    private UserTransaction userTx;

    public void doStuff() {
        userTx.begin();
        ps.doStuff();
        userTx.commit();
    }

}

persistenceFacade调用persistencesingleton上的dostufle()时,是否考虑在persistenceFacade的方法dostufle()中启动的事务?实体管理器是否自动加入事务,并在并发访问期间按照事务隔离的预期行为?

共有1个答案

井翰
2023-03-14

UserTransaction用于更改默认的事务划分,但我们仍然控制JTA事务。

https://www.javacodegeeks.com/2013/03/types-of-entity-managers-application-managed-entitymanager.html说:

如果您有UserTransaction,您可以开始划分事务中要执行的内容。请注意,您仍然在控制JTA事务

在事务范围的实体管理器上调用方法时,它必须首先查看是否存在传播的持久性上下文。如果存在,实体管理器将使用此持久性上下文来执行操作。此后,该组件或任何其他组件中的所有事务范围内的实体管理器操作都将使用这个新创建的持久化上下文。这种行为与使用容器管理还是bean管理的事务划分无关。

你的问题的答案是肯定的(第一个问题)

实体管理器是否自动加入事务,并在并发访问期间按照事务隔离的预期行为?

 类似资料:
  • 在我的应用程序中,我配置了XML启动bean: 我还配置了事务管理: 并且具有自动连线的: 因此,它失败与异常: 我做错了什么?

  • 有什么想法吗?

  • 我正在使用Spring(3.1.4版本)和HibernateTemplate(3.6.7.Final)以及Spring数据JPA(1.3.0版本)。我在配置文件中定义了两个事务管理器,一个用于Hibernate,另一个用于Spring数据JPA。两个事务管理器使用不同的数据源。 我想在代码中使用Hibernate的事务管理器和Spring data JPA的事务管理器。(Spring文档链接-10

  • 本文向大家介绍SpringMVC+MyBatis 事务管理(实例),包括了SpringMVC+MyBatis 事务管理(实例)的使用技巧和注意事项,需要的朋友参考一下 前言         spring事务管理包含两种情况,编程式事务、声明式事务。而声明式事务又包括基于注解@Transactional和tx+aop的方式。那么本文先分析编程式注解事务和基于注解的声明式事务。 编程式事务管理使用Tr

  • 17. 事务管理

  • 数据库的事务就是将任意多个SQL语句看作一个整体,只有这些SQL语句都成功执行,DBMS才会保存这些SQL语句对数据库的修改(事务提交)。否则,数据库将恢复到执行SQL语句之前的状态(事务回滚)。大多数DBMS都支持两种事务模式:隐式模式和显式模式。当执行每一条SQL语句时,无需进行事务提交,就可以直接将修改结果保存到数据库中。这叫做隐式事务模式。显式模式必须使用相应的语句或命令开起事务、提交事务