2014-11-20 84 views
5

作爲一名學生,我幾乎讀了所有的春季文檔。據我瞭解,春天是配置怪物。基於註釋或基於Xml的,沒關係,但我真正不明白的是事務管理器和實體管理器之間有什麼區別。交易經理和實體經理之間有什麼區別

如果我們在Dao層注入了entityManager,爲什麼我們需要在服務層上使用事務管理器,反之亦然。如果我們注入事務管理器(包裝實體管理器),爲什麼我們需要在DaoLayer上注入實體管理器。對於JPARepositories,我甚至不需要注入任何經理。春天爲我做了一切(我不是很懂機械)。我的另一個問題是JPARepositories Spring使用entityManager或transactionManager?

回答

6

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

相關問題