默认情况下,Spring Data JPA查找名为的EntityManagerFactoryentityManagerFactory。查阅Javadoc 或Spring Data JPA@L_301_0@这一部分。EnableJpaRepositories``Table2.1
这意味着您要么必须将emfbean 重命名为,要么entityManagerFactory将Spring配置更改为:
<jpa:repositories base-package='your.package' entity-manager-factory-ref='emf' />
(如果您使用的是XML)
要么
@EnableJpaRepositories(basePackages='your.package',entityManagerFactoryRef='emf')
(如果您使用的是Java Config)
解决方法我正在使用spring数据jpa,hibernate,mysql,tomcat7,maven开发应用程序,并且创建错误。我试图弄清楚,但失败了。
错误是在设置构造函数参数时无法解析对bean’entityManagerFactory’的引用;没有定义名为’entityManagerFactory’的bean。自动连接的依赖项注入失败
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’initDbService’: Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.wahid.cse.repository.RoleRepository org.wahid.cse.service.InitDbService.roleRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’roleRepository’: Cannot create inner bean ’(inner bean)#c08f81’ of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property ’entityManager’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’(inner bean)#c08f81’: Cannot resolve reference to bean ’entityManagerFactory’ while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ’entityManagerFactory’ is definedat org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.wahid.cse.repository.RoleRepository org.wahid.cse.service.InitDbService.roleRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’roleRepository’: Cannot create inner bean ’(inner bean)#c08f81’ of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property ’entityManager’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’(inner bean)#c08f81’: Cannot resolve reference to bean ’entityManagerFactory’ while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ’entityManagerFactory’ is definedat org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)... 22 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’roleRepository’: Cannot create inner bean ’(inner bean)#c08f81’ of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property ’entityManager’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’(inner bean)#c08f81’: Cannot resolve reference to bean ’entityManagerFactory’ while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ’entityManagerFactory’ is definedat org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:290)at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:129)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1456)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)... 24 more这是我的ApplicationContext.xml文件
<?xml version='1.0' encoding='UTF-8'?><beans xmlns='http://www.springframework.org/schema/beans'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xmlns:context='http://www.springframework.org/schema/context'xmlns:jdbc='http://www.springframework.org/schema/jdbc'xmlns:tx='http://www.springframework.org/schema/tx'xmlns:jpa='http://www.springframework.org/schema/data/jpa'xsi:schemaLocation='http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd'><context:component-scan base-package='org.wahid.cse'> <context:exclude-filter type='annotation'expression='org.springframework.stereotype.Controller' /></context:component-scan><beandestroy-method='close'> <property name='driverClassName' value='com.mysql.jdbc.Driver' /> <property name='url' value='jdbc:mysql://localhost:3306/jba' /> <property name='username' value='root' /> <property name='password' value='' /></bean><bean class='org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean'> <property name='packagesToScan' value='org.wahid.cse.entity' /> <property name='dataSource' ref='dataSource' /> <property name='jpaProperties'><props> <prop key='hibernate.show_sql'>true</prop> <prop key='hibernate.hbm2ddl.auto'>create</prop> <prop key='hibernate.dialect'>org.hibernate.dialect.MySQLDialect</prop></props> </property> <property name='persistenceProvider'><bean class='org.hibernate.jpa.HibernatePersistenceProvider'></bean> </property></bean><tx:annotation-driven transaction-manager='transactionManager' /><bean id='transactionManager'> <property name='dataSource' ref='dataSource' /></bean>这是pom.xml
<project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd'><modelVersion>4.0.0</modelVersion><groupId>org.ferdous.wahid</groupId><artifactId>java-blog-aggregator</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><!-- Shared version number properties --><properties> <org.springframework.version>4.0.5.RELEASE</org.springframework.version> <apache.tiles>3.0.4</apache.tiles> <servlet-api-version>3.1.0</servlet-api-version></properties><dependencies> <dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId><version>2.0.1</version> </dependency> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.31</version> </dependency> <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>1.6.1.RELEASE</version> </dependency> <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.3.5.Final</version> </dependency> <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${servlet-api-version}</version><scope>provided</scope> </dependency> <!-- <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.2.1</version> </dependency> --> <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version> </dependency> <dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-core</artifactId><version>${apache.tiles}</version> </dependency> <dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-jsp</artifactId><version>${apache.tiles}</version> </dependency> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.7</version> </dependency> <!-- Core utilities used by other modules. Define this if you use Spring Utility APIs (org.springframework.core.*/org.springframework.util.*) --> <dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Expression Language (depends on spring-core) Define this if you use Spring Expression APIs (org.springframework.expression.*) --> <dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Bean Factory and JavaBeans utilities (depends on spring-core) Define this if you use Spring Bean APIs (org.springframework.beans.*) --> <dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Aspect Oriented Programming (AOP) Framework (depends on spring-core,spring-beans) Define this if you use Spring AOP APIs (org.springframework.aop.*) --> <dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Application Context (depends on spring-core,spring-expression,spring-aop,spring-beans) This is the central artifact for Spring’s Dependency Injection Container and is generally always defined --> <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Various Application Context utilities,including EhCache,JavaMail,Quartz,and Freemarker integration Define this if you need any of these integrations --> <dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Transaction Management Abstraction (depends on spring-core,spring-beans,spring-context) Define this if you use Spring Transactions or DAO Exception Hierarchy (org.springframework.transaction.*/org.springframework.dao.*) --> <dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${org.springframework.version}</version> </dependency> <!-- JDBC Data Access Library (depends on spring-core,spring-context,spring-tx) Define this if you use Spring’s JdbcTemplate API (org.springframework.jdbc.*) --> <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Object-to-Relation-Mapping (ORM) integration with Hibernate,JPA,and iBatis. (depends on spring-core,spring-tx) Define this if you need ORM (org.springframework.orm.*) --> <dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Object-to-XML Mapping (OXM) abstraction and integration with JAXB,JiBX,Castor,XStream,and XML Beans. (depends on spring-core,spring-context) Define this if you need OXM (org.springframework.oxm.*) --> <dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Web application development utilities applicable to both Servlet and Portlet Environments (depends on spring-core,spring-context) Define this if you use Spring MVC,or wish to use Struts,JSF,or another web framework with Spring (org.springframework.web.*) --> <dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Spring MVC for Servlet Environments (depends on spring-core,spring-web) Define this if you use Spring MVC with a Servlet Container such as Apache Tomcat (org.springframework.web.servlet.*) --> <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Spring MVC for Portlet Environments (depends on spring-core,spring-web) Define this if you use Spring MVC with a Portlet Container (org.springframework.web.portlet.*) --> <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc-portlet</artifactId><version>${org.springframework.version}</version> </dependency> <!-- Support for testing Spring applications with tools such as JUnit and TestNG This artifact is generally always defined with a ’test’ scope for the integration testing framework and unit testing stubs --> <dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${org.springframework.version}</version><scope>test</scope> </dependency></dependencies><build> <plugins><plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version></plugin><plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration><source>1.7</source><target>1.7</target> </configuration></plugin> </plugins></build>
RoleRepository现为
import org.springframework.data.jpa.repository.JpaRepository;import org.wahid.cse.entity.Role; public interface RoleRepository extends JpaRepository<Role,Integer>{ }