2016-06-07 186 views
0

我有一個在Tomcat 8上部署的JPA/spring/hibernate應用程序。但是當tomcat服務器啓動時,我可以看到這條警告消息「沒有合格的bean類型[javax.persistence.EntityManagerFactory]被定義「。幫助將不勝感激,因爲我不知道配置錯誤。JPA沒有定義類型爲[javax.persistence.EntityManagerFactory]的合格bean

的persistence.xml

<persistence-unit name="persistenceUnit" 
    transaction-type="RESOURCE_LOCAL"> 
... 

彈簧上下文文件被定義爲幾個文件爲可重用性

上下文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" > 
... 

上下文config.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這樣的,我有消息沒有名爲豆「 persistenceUnit'被定義爲

@PersistenceContext(unitName="persistenceUnit") 
protected EntityManager entityManager; 

回答

0

你在@Configuration註釋類bean定義成這樣......一個ND命名爲相應的您參考

@Bean 
public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 

    LocalContainerEntityManagerFactoryBean factory = null; 
    try { 
     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setGenerateDdl(true); 
     vendorAdapter.setShowSql(true); 

     vendorAdapter.setDatabasePlatform(MyAppSettings.getDbPlattform()); 

     HibernateJpaDialect jpd = new HibernateJpaDialect(); 
     factory = new LocalContainerEntityManagerFactoryBean(); 

     factory.setJpaDialect(jpd); 
     factory.setJpaVendorAdapter(vendorAdapter); 
     factory.setPackagesToScan(MyAppSettings.packagesToScan); 
     factory.setDataSource(MyDataSource()); 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

    return factory; 
} 

編輯:

也許你的Spring配置XML心不是納入組件掃描 嘗試:

@ImportResource("classpath:spring-config.xml") 

....請張貼滿stacjtrace你eception ..

+0

沒有唯一的參考ŧ ○LocalContainerEntityManagerFactoryBean類是在配置-ds.xml中它是比你 – jpl

+0

<豆ID =「EntityManager的」類=「org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean」> <屬性名=「數據源」 REF相同的配置= 「datasource」/> jpl

+0

其他參數在persistence.xml文件(provider,jar to scan和properties)中指定。 – jpl

相關問題