2011-04-06 69 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