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.