事务管理器和实体管理器有什么区别

2022-09-03 14:47:49

作为一名学生,我阅读了几乎所有的春季文档。据我所知,春天是配置怪物。基于注释或基于Xml,这并不重要,但我真正不明白的是事务管理器和实体管理器之间的区别是什么。

如果我们在 Dao 层上注入了 entityManager,为什么我们需要在服务层上使用事务管理器,反之亦然。如果我们注入事务管理器(包装实体管理器),为什么我们需要在 DaoLayer 上注入 entitymanager。对于JPA存储库,我甚至不需要注入任何管理器。春天为我做一切(我真的不懂力学)。我的另一个问题是对于JPARepositors Spring使用entityManager还是transageManager?


答案 1

TransactionManager与EntityManager完全不同,一个是负责实体(侦听器,实体,关系,它们的持久性生命周期,此接口定义了用于与持久性上下文交互的方法)与实体处于活动状态的特定持久性上下文相关联,同时TransamentManager负责事务数据访问,为应用程序中需要发生的所有事务提供支持。

配置将一个实体管理器对象绑定到特定的事务管理器。

<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <qualifier value="pagTransactionManager" />
</bean>

<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
    <property name="persistenceUnitName" value="persistenceUnit" />
    <property name="dataSource" ref="dataSource" />
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
    </property>
</bean>

这意味着与数据库和实体的连接由 EntityManager 管理,但使用 @Transaction 注释在服务层中打开关闭事务的对象是 TransactionManager。

该接口允许应用程序服务器代表被管理的应用程序控制事务边界,该接口包含许多用于控制它们的方法,例如:提交,挂起,回滚。javax.transaction.TransactionManager

所以基本上注入这些对象之一取决于你正在寻找什么,管理实体并使用它们操作使用实体管理器,使用事务管理器自己控制应用程序的事务状态。


答案 2

将域类映射为实体与事务管理 不同。EntityManager有助于创建关系黑白域对象,并有助于在DAO层中使用最少的代码创建标准,其中事务管理可以帮助您通过根据业务需求设置不同的事务传播来管理事务。


推荐