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