Spring @Autowired can not wire Jpa repository
27,957
I also had the same problem.I solved it with following solution. If your Entity classes and Repositories in a different package you need to use following annotations.
@SpringBootApplication
@EntityScan(basePackages = {"EntityPackage"} )
@EnableJpaRepositories(basePackages = {"RepositoryPackage"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Comments
-
krzakov almost 3 years
I clearly missing something here. I'm making a simple
spring boot
app withspring data jpa
inluded and face follwing error:Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [locassa.domain.repository.PersonRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] ... 32 common frames omitted
My code:
Application:
@SpringBootApplication @ComponentScan(basePackages = {"app.controller", "app.domain"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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>pl.mosek</groupId> <artifactId>pl.mosek</artifactId> <version>0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.0.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.6</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> </dependencies> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Controller:
@RestController public class TestController { @Autowired PersonService personService; @RequestMapping("/") public String index() { return "Test spring boot"; } @RequestMapping("/person/{id}") public Person personById(@PathVariable Long id) { return personService.findPerson(id); } }
PersonService:
public interface PersonService { Person findPerson(Long id); }
PersonServiceImpl:
@Service public class PersonServiceImpl implements PersonService { @Autowired PersonRepository personRepository; public Person findPerson(Long id) { return personRepository.findOne(id); } }
PersonRepository (this one cannot be autowired):
public interface PersonRepository extends CrudRepository<Person, Long> { }
Searched on the web already. I didnt found a thing. Any ideas?
-
krzakov over 8 yearsBoth of them are under
app.domain
. Entities are underapp.domain.model
and repositories underapp.domain.repository
-
krzakov over 8 yearsI tried
@EnableJpaRepositories
but without combinationwith@EntityScan
. Both of those annotations solve the isssue. -
Dan W about 7 yearsThank you so much.
-
Jorge Machado about 7 yearsSo you don't need the autowire?
-
Kanagavelu Sugumar about 6 yearsI am not using spring boot, so @EntityScan is not located? is it boot is mandatory to use this ?
-
JustTry over 5 yearsorg.springframework.boot.autoconfigure.domain.EntityScan and org.springframework.data.jpa.repository.config.EnableJpaRepositories class solved my problem, I need to use both of them
-
Shalika about 5 yearsThis fix the issue.I add @ComponentScan(basePackages = {"basepackage"}) too.Thank you very much.