繁体   English   中英

Spring + JPA EntityManager注入服务和dao

[英]Spring+JPA EntityManager injected in service and dao

我正在使用Spring + JPA (使用Hibernate作为JPA提供程序)使用服务和dao。

我想在服务和dao中注入JPA EntityManager ,其中服务管理事务,而dao管理对象持久性。

dao在服务中是@Autowired ,而EntityManager在服务和Dao中都使用@Autowired注入。

这样我是否可以保证在Service和dao中都注入相同的EntityManager

您可以使用@PersistenceContext注入EntityManager,这将注入由Spring管理的共享EntityManager。 但是我认为您也应该重新考虑在服务级别中使用EM的方法。

也请看这里: Doc

随着OP的注释更新:您只能在DAO类中拥有EntityManager,但是可以在相同的服务方法中进行那些将成为原子dao的调用,并使它具有事务性。 查看两个Dao原子调用

EntityManager初始化为Singleton Bean,因此只要确保在应用程序中配置了2个或更多的情况下连接正确的EntityManager Bean,就不必担心。

    @PersistenceContext(unitName = "<persistent-unit-name>")
    private EntityManager entityManager;


  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
        <property name="persistenceUnitName" value="<persistent-unit-name>" />
    ...
    </bean>

您是否尝试过@PersistenceContext批注

@PersistenceContext
private EntityManager entityManager;

查看此链接以获取更多信息。 另外, 在这里查找此注释的所有可能选项。

这是完全错误的方式,但是,所有EntityManager实例都将使用EntityManagerFactoryBean创建。 如果创建了此@Bean,则不能保证您具有相同的EntityManager实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM