【发布时间】:2016-06-07 15:58:51
【问题描述】:
我在 Tomcat 8 上部署了 JPA/spring/hibernate 应用程序。但是当 Tomcat 服务器启动时,我可以看到此警告消息“没有定义类型 [javax.persistence.EntityManagerFactory] 的合格 bean”。帮助将不胜感激,因为我不知道配置错误。
persistence.xml
<persistence-unit name="persistenceUnit"
transaction-type="RESOURCE_LOCAL">
...
spring 上下文文件为了可重用性被定义为多个文件
上下文-ds.xml
<bean id="entityManager" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="datasource" />
<property name="persistenceUnitName" value="persistenceUnit" />
</bean>
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManager" />
</bean>
<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
...
上下文配置.xml
<context:annotation-config />
<context:component-scan base-package="com.app" />
<jpa:repositories base-package="com.app" />
<tx:annotation-driven transaction-manager="txManager"
order="200" />
和 web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/context-config.xml, /WEB-INF/context-ds.xml, /WEB-INF/context-dao.xml</param-value>
</context-param>
并且DAO抽象类定义了PersistenceContext注解
@PersistenceContext
protected EntityManager entityManager;
真实信息
11:45:18.710 [localhost-startStop-1] WARN AbstractBeanFactory.getTypeForFactoryBean - Bean creation exception on FactoryBean type check: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myDAO' defined in ServletContext resource [/WEB-INF/context-dao.xml]: Cannot create inner bean 'genericDao$child#632cb33' of type [com.app.dao.GenericDaoImpl] while setting bean property 'target'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'genericDao$child#632cb33': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined
如果我像这样声明 PersistenceContext,我会收到消息 No bean named 'persistenceUnit' is defined
@PersistenceContext(unitName="persistenceUnit")
protected EntityManager entityManager;
【问题讨论】: