Я реализую Rest API с Spring Boot. Поскольку классы сущности из пакета из другого пакета, я должен был указать это с аннотацией EntityScan
. Кроме того, я использовал EnableJpaRepositories
, чтобы указать пакет, в котором определен репозиторий JPA. Вот что мой проект выглядит следующим образом:«Отсутствие квалификационного компонента типа» для репозитория JPA в Spring Boot
//Application.java
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EntityScan("org.mdacc.rists.cghub.model")
@EnableJpaRepositories("org.mdacc.rists.cghub.ws.repository")
В моем классе контроллера у меня был объект SeqService autowired.
//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
представляет собой интерфейс, из которого я создал класс Bean для этого SeqServiceBean
. В SeqServiceBean
я autowired репозиторий 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]
Я не понимаю эту ошибку. Что это связано с квалификационным компонентом?
В основном это говорит о том, что он не может найти подходящий экземпляр «SeqRepository» для autowire. Добавьте структуру проекта и код, связанный с репозиторием. –
refactor Application.java аннотации удалить все использовать это @SpringBootApplication @EntityScan ({"org.mdacc.rists.cghub.model"}) @EnableJpaRepositories (basePackages = {"org.mdacc.rists.cghub.ws.repository" }) –
@kakashi hatake попробовал то, что вы предложили, и по-прежнему та же ошибка – Nasreddin