2011-04-06 70 views

回答

0

我終於找到了解決方案。可以在Spring中注入一個EntityManager而不需要使用@PersistenceContext。有一個Spring的factorybean可以創建一個共享的EntityManager。鑑於實體管理器工廠:

<bean id="entityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 
<bean id="myJpaFacade" class="com.example.MyJpaFacade"> 
    <property name="entityManager" ref="entityManager" /> 
</bean> 

現在我可以刪除MyJpaFacade的@PersistenceContext註釋,這樣的Glassfish不會嘗試查找並注入實體管理器到EntityManager的財產。

+0

另一個好處是,如果實體bean或persistence.xml已被更改,JRebel現在更好地重新注入新的EntityManager。 – 2011-09-23 11:27:47

0

春天配置可以使用GF不會」瞭解不同的註釋。沒有你的代碼的一些例子,很難走得更遠。

沒有任何東西會將DI關閉......它是容器的一部分,因此您需要使用它不關心的註釋。

+0

問題是@PersistenceContext,它是從Spring注入的。我一直沒有找到一個非JEE,Spring的替代品。 – 2011-04-08 05:43:22

+0

只需使用完整的軟件包名稱,如@ javax.persistence.PersistenceContext private EntityManager em; – Preston 2011-04-08 15:53:49

+0

我無法看到@PersistenceContext EntityManager em; (在java文件的頂部有一個導入)和@ javax.persistence.PersistenceContext private EntityManager em;兩者都是從Glassfish中注入的,而Glassfish是失敗的,而我的spring配置文件,如果Glassfish不成功,它將會成功。 – 2011-04-12 07:48:55