Spring Boot中的JPA存储库"没有类型的限定bean"

Nas*_*din 15 java spring jpa spring-data spring-boot

我正在使用Spring Boot实现Rest API.由于我的实体类来自另一个包的包,我必须使用注释指定它EntityScan.此外,我曾经EnableJpaRepositories指定了定义JPA存储库的包.这是我的项目的样子:

在此输入图像描述

//Application.java

@Configuration
@EnableAutoConfiguration
@ComponentScan
@EntityScan("org.mdacc.rists.cghub.model")
@EnableJpaRepositories("org.mdacc.rists.cghub.ws.repository") 
Run Code Online (Sandbox Code Playgroud)

在我的控制器类中,我有一个自动装配的SeqService对象.

//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);
}
Run Code Online (Sandbox Code Playgroud)

SeqService是一个接口,我从中创建了一个Bean类SeqServiceBean.在SeqServiceBeanI中自动安装了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);
}
Run Code Online (Sandbox Code Playgroud)

但是,由于以下错误,应用程序无法启动:

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]
Run Code Online (Sandbox Code Playgroud)

我不明白这个错误.它与合格豆有什么关系?

Ali*_*ani 19

你正在扫描你错误的包裹EnableJpaRepositories.没有org.mdacc.rists.cghub.ws.repository包裹.所以,请改用:

@EnableJpaRepositories("org.mda.rists.cghub.ws.repository") 
Run Code Online (Sandbox Code Playgroud)

Spring Boot不需要任何特定的代码布局,但是,有一些最佳实践可以帮助您.查看有关构造代码的最佳实践的spring boot文档.

  • 为什么要添加这个注释呢?我以为spring会自己扫描包! (3认同)
  • 这个注释应该加在哪里呢?存储库类?`WebApplicationInitializerClass`?其他的东西 (2认同)