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來控制你的應用程序的事務狀態。