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