web-dev-qa-db-ja.com

Spring BootのJPAリポジトリの「型の修飾Beanはありません」

Spring BootでRest APIを実装しています。私のエンティティークラスは別のパッケージのパッケージからのものであるため、注釈EntityScanでそれを指定する必要がありました。また、EnableJpaRepositoriesを使用して、JPAリポジトリが定義されているパッケージを指定しました。私のプロジェクトは次のようになります。

enter image description here

//Application.Java

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

コントローラークラスでは、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);
}

SeqServiceは、そのSeqServiceBeanのBeanクラスを作成したインターフェイスです。 SeqServiceBeanで、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);
}

ただし、次のエラーが原因でアプリケーションを開始できませんでした:

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]

エラーがわかりません。資格のあるBeanとは何の関係がありますか?

15
Nasreddin

EnableJpaRepositoriesで間違ったパッケージをスキャンしていました。 org.mdacc.rists.cghub.ws.repositoryパッケージはありません。したがって、代わりにこれを使用してください:

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

Spring Bootでは、特定のコードレイアウトを機能させる必要はありませんが、役立つベストプラクティスがいくつかあります。コードの構造化のベストプラクティスについては、 spring boot documentation をご覧ください。

16
Ali Dehghani