Hibernate 未定义类型为[javax.persistence.EntityManagerFactory]的唯一bean:应为单个bean,但找到2个
我正在为两个不同的数据库定义两个Hibernate 未定义类型为[javax.persistence.EntityManagerFactory]的唯一bean:应为单个bean,但找到2个,hibernate,spring,jpa,Hibernate,Spring,Jpa,我正在为两个不同的数据库定义两个EntityManagerbean。每个EntityManagerbean都引用在persistence.xml中定义的唯一的、各自的 同样的代码和配置在Spring2.x上运行良好。当我升级到Spring 3时,在服务器中部署应用时,我看到以下异常: 原因:org.springframework.beans.factory.NoSuchBean定义异常:未定义类型为[javax.persistence.EntityManagerFactory]的唯一bean:预
EntityManager
bean。每个EntityManager
bean都引用在persistence.xml
中定义的唯一的、各自的
同样的代码和配置在Spring2.x上运行良好。当我升级到Spring 3时,在服务器中部署应用时,我看到以下异常:
原因:org.springframework.beans.factory.NoSuchBean定义异常:未定义类型为[javax.persistence.EntityManagerFactory]的唯一bean:预期为单个bean,但找到2个
有人面对过这个问题吗?升级到Spring 3时我是否遗漏了什么?
我非常感谢您的回复
我将Spring3与Hibernate和JPA一起使用
问题不在于含糊不清;我声明了两个EntityManagerFactory
bean,并按如下方式注入它们:
<bean id="oracleJpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<bean id="sqlJpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
<property name="entityManagerFactory" ref="sqlEntityManagerFactory"></property>
</bean>
按如下方式注入EntityManager:
@PersistenceContext(unitName = "unit1")
private EntityManager entityManager;
@PersistenceUnit(unitName = "unit1")
private EntityManagerFactory entityManagerFactory;
或者您的EntityManagerFactory如下所示:
@PersistenceContext(unitName = "unit1")
private EntityManager entityManager;
@PersistenceUnit(unitName = "unit1")
private EntityManagerFactory entityManagerFactory;
(您可能需要在您的上下文中使用它)在某个地方,您有一个类型为
org.springframework.flex.core.io.JpaHibernateConfigProcessor
的bean,它看起来有一个init方法,可以自动连接到javax.persistence.EntityManagerFactory
。因为有两个,它失败了。它可能是在XML中明确声明的,比如:
<bean class="org.springframework.flex.core.io.JpaHibernateConfigProcessor"/>
注意,没有id属性,因此长bean名称以“#0”结尾
编辑:仔细想想,该类的名称看起来像某种在ApplicationContext启动时运行的bean处理器,因此它可能是由自定义spring命名空间元素或其他机制创建的。我的问题解决了。SpringFlexCore库是罪魁祸首。我使用的1.5.0.M1版本不允许多个EntityManagerFactory。当我使用1.5.0.RELEASE时,错误消失了
你必须先做所有的事情,比如定义 数据源 eventManagerFactory 交易经理 persistenceUnits(必须在单独的persistence.xml文件中)等 然后编译它就可以了 另外,不要忘记在baseDao类中添加注释
作为@applicationContext(unitName=“example”)在哪里引用这个bean?您在询问EntityManagerFactory类型的bean时是否含糊不清?您应该将此信息添加到问题中,而不是发布注释。配置代码段显示了工厂正在使用的两个位置。我打赌还有第三个。向我们显示完整的错误消息,其中包括由于此问题而无法创建的bean。Sean,我们没有使用注释来注入依赖项。我们在配置文件中执行此操作,是的,我们在传递引用时提供entityManagerFactory名称。因此,thr不应含糊不清。