簡體   English   中英

事務管理器和實體管理器有什么區別

[英]What is the difference between Transaction manager and Entity Manager

作為一名學生,我閱讀了幾乎所有的 spring 文檔。 據我所知,spring 是配置怪物。 基於注釋或基於 Xml 的,都沒有關系,但我真正不明白的是事務管理器和實體管理器之間的區別是什么。

如果我們在 Dao 層注入了 entityManager,為什么還要在服務層注入事務管理器,反之亦然。 如果我們注入事務管理器(包裝實體管理器),為什么我們需要在 DaoLayer 上注入實體管理器。 對於 JPARepositories,我什至不需要注入任何管理器。 Spring 為我做了一切(我不太了解機制)。 我的另一個問題是對於 JPARepositories Spring 使用 entityManager 還是 transactionManager?

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 注釋打開關閉事務的對象是 TransactionManager。

javax.transaction.TransactionManager接口允許應用程序服務器代表被管理的應用程序控制事務邊界,該接口包含許多用於控制它們的方法,例如:提交、掛起、回滾。

因此,基本上注入這些對象之一取決於您要查找的內容,管理實體並使用實體管理器對其進行操作,使用事務管理器自己控制應用程序的事務狀態。

將域類映射為實體與事務管理不同。 EntityManager 有助於創建關系 b/w 域對象,並有助於在 DAO 層中使用最少的代碼創建標准,而事務管理可幫助您通過根據業務需求設置不同的事務傳播來管理事務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM