Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring data jpa- No bean named 'entityManagerFactory' is defined; Injection of autowired dependencies failed

I'm developing application using spring data jpa,hibernate,mysql,tomcat7,maven and it's create error.I'm trying to figure it out but i failed.

error are Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; No bean named 'entityManagerFactory' is defined; Injection of autowired dependencies failed

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 defined at 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 defined at 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 defined at 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 

here is my ApplicationContext.xml file

<?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>  <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"     destroy-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 id="emf"     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 class="org.springframework.orm.jpa.JpaTransactionManager"     id="transactionManager">     <property name="dataSource" ref="dataSource" /> </bean> 

Here is 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-aop, 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-beans, 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-beans, spring-context, 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-beans,          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-beans, 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-beans,          spring-context, 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-beans,          spring-context, 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 is

import org.springframework.data.jpa.repository.JpaRepository; import org.wahid.cse.entity.Role;   public interface RoleRepository extends JpaRepository<Role, Integer>{   } 
like image 737
Ferdous Wahid Avatar asked Jul 01 '14 23:07

Ferdous Wahid


People also ask

How do I use EntityManagerFactory in spring boot?

The complete example of getting EntityManager using the custom configuration in Spring Boot. Open eclipse and create maven project, Don't forget to check 'Create a simple project (skip)'click on next. Fill all details(GroupId – entitymanager, ArtifactId – entitymanager and name – entitymanager) and click on finish.

How do I fix Nosuchbeandefinitionexception?

The best solution is to properly isolate beans. The DispatcherServlet is responsible for routing and handling requests so all related beans should go into its context. The ContextLoaderListener , which loads the root context, should initialize any beans the rest of your application needs: services, repositories, etc.

How do I make a EntityManagerFactory?

To create the EntityManagerFactory you need to create to persistence. xml file first. The file is where you configure the JPA. This file must be placed inside the META-INF directory in your program working directory.

How is EntityManagerFactory defined?

An EntityManagerFactory is constructed for a specific database, and by managing resources efficiently (e.g. a pool of sockets), it provides an efficient way to construct multiple EntityManager instances for that database.


1 Answers

Spring Data JPA by default looks for an EntityManagerFactory named entityManagerFactory. Check out this part of the Javadoc of EnableJpaRepositories or Table 2.1 of the Spring Data JPA documentation.

That means that you either have to rename your emf bean to entityManagerFactory or change your Spring configuration to:

<jpa:repositories base-package="your.package" entity-manager-factory-ref="emf" />  

(if you are using XML)

or

@EnableJpaRepositories(basePackages="your.package", entityManagerFactoryRef="emf")

(if you are using Java Config)

like image 188
geoand Avatar answered Sep 18 '22 21:09

geoand