TransactionManager与EntityManager完全不同,它负责与特定持久性相关联的实体(侦听器,实体,关系,持久生命周期以及此接口定义用于与持久化上下文进行交互的方法)上下文中实体处于活动状态,同时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>
它意味着到数据库的连接和实体被EntityManager管理的,但是,在使用@Transaction注解服务层打开一个接近交易的对象是事务管理。
javax.transaction.TransactionManager
接口允许应用程序服务器代表被管理的应用程序控制事务边界,该接口包含许多用于控制它们的方法,例如:commit,suspend,rollback。
所以基本上注入这些对象之一取决于你在找什么,管理实体并使用entitymanager与它们一起操作,通过你自己使用transactionmanager来控制你的应用程序的事务状态。