2014-11-20 20 views
5

Come studente, ho letto quasi tutta la documentazione di primavera. Per quanto ho capito che la primavera è la configurazione mostro. Basato su annotazioni o basato su Xml, non ha importanza, ma ciò che realmente non capisco è qual è la differenza tra il gestore delle transazioni e il gestore delle entità.Qual è la differenza tra Transaction Manager ed Entity Manager

Se abbiamo iniettato entityManager su livello Dao, perché è necessario il gestore transazioni sul livello di servizio o viceversa. Se inseriamo il gestore delle transazioni (che avvolge il gestore di entità), perché è necessario iniettare il gestore di entità su DaoLayer. Per i JPARepositories, non ho nemmeno bisogno di iniettare alcun manager. La primavera fa tutto per me (non capisco davvero la meccanica). La mia altra domanda è per JPARepositories Spring usa entityManager o transactionManager?

risposta

6

TransactionManager è completamente diverso da EntityManager, uno è responsabile delle entità (listener, entità, relazioni, ciclo di vita di persistenza di essi e questa interfaccia definisce i metodi utilizzati per interagire con il contesto di persistenza) associato a una persistenza specifica contesto in cui le entità sono vive, nel frattempo TransactionManager è responsabile per l'accesso ai dati transazionali, fornendo supporto per tutte le transazioni che devono verificarsi all'interno dell'applicazione.

La configurazione esegue il binding di un oggetto entitymanager a uno specifico gestore transazioni.

<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> 

Il che significa che la connessione al database e le entità sono gestite dal EntityManager, ma l'oggetto che si aprono una stretta transazione nel livello di servizio utilizzando l'annotazione @Transaction è il TransactionManager.

L'interfaccia javax.transaction.TransactionManager consente al server delle applicazioni di controllare i limiti delle transazioni per conto dell'applicazione gestita, questa interfaccia contiene molti metodi che vengono utilizzati per controllarli come: commit, suspend, rollback.

Quindi iniettare fondamentalmente uno di questi oggetti dipende da ciò che si sta cercando, gestire le entità e operare con loro utilizzando entitymanager, controllare lo stato transazionale della propria applicazione da solo utilizzando lo transactionmanager.

Problemi correlati