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



作为一名学生,我几乎阅读了所有春季文档。据我了解,春天是配置怪物。基于注释或基于XML,没关系,但我真正不明白的是事务管理器和实体管理器之间的区别。

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

TransactionManager

与 EntityManager 完全不同,一个负责与实体处于活动状态的特定持久性上下文关联的实体(侦听器、实体、关系、持久性生命周期,此接口定义了用于与持久性上下文交互的方法),同时 TransactionManager 负责事务数据访问,支持需要在您的应用。

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

<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>

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

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

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

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

最新更新