2014-11-20 81 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来控制你的应用程序的事务状态。

相关问题