web-dev-qa-db-fra.com

"Pas de bean qualificatif de type" pour le référentiel JPA dans Spring Boot

J'implémente l'API Rest avec Spring Boot. Comme mes classes d'entités proviennent d'un package d'un autre package, j'ai dû spécifier cela avec l'annotation EntityScan. J'ai également utilisé EnableJpaRepositories pour spécifier le package dans lequel le référentiel JPA est défini. Voici à quoi ressemble mon projet:

enter image description here

//Application.Java

@Configuration
@EnableAutoConfiguration
@ComponentScan
@EntityScan("org.mdacc.rists.cghub.model")
@EnableJpaRepositories("org.mdacc.rists.cghub.ws.repository") 

Dans ma classe de contrôleur, j'avais un objet SeqService câblé automatiquement.

//SeqController.Java

@Autowired private SeqService seqService;

@RequestMapping(value = "/api/seqs", method = GET, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<List<SeqTb>> getSeqs() {
    List<SeqTb> seqs = seqService.findAll();
    return new ResponseEntity<List<SeqTb>>(seqs, HttpStatus.OK);
}

SeqService est une interface à partir de laquelle j'ai créé une classe Bean pour cette SeqServiceBean. Dans le SeqServiceBean j'ai câblé automatiquement le référentiel JPA:

// SeqServiceBean.Java

@Autowired private SeqRepository seqRepository;

@Override
public List<SeqTb> findAll() {
    List<SeqTb> seqs = seqRepository.findAll();
    return seqs;
}

//SeqRepository.Java

@Repository
public interface SeqRepository extends JpaRepository<SeqTb, Integer> {

    @Override
    public List<SeqTb> findAll();

    public SeqTb findByAnalysisId(String analysisId);
}

Cependant, l'application n'a pas pu démarrer en raison de l'erreur suivante:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.mda.rists.cghub.ws.repository.SeqRepository] 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.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.Java:1119) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.Java:1014) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.Java:545) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]

Je ne comprends pas l'erreur. Qu'est-ce que cela a à voir avec le bean de qualification?

15
Nasreddin

Vous scanniez le mauvais paquet dans votre EnableJpaRepositories. Il n'y a pas org.mdacc.rists.cghub.ws.repository paquet. Donc, utilisez ceci à la place:

@EnableJpaRepositories("org.mda.rists.cghub.ws.repository") 

Spring Boot ne nécessite aucune disposition de code spécifique pour fonctionner, cependant, il existe certaines meilleures pratiques qui vous aideront. Consultez la documentation de démarrage de printemps sur les meilleures pratiques de structuration de votre code.

16
Ali Dehghani