Для поля xx в службе xx требуется компонент типа - PullRequest
0 голосов
/ 06 января 2019

Я получаю следующую ошибку:

Field ansRepo in com.myproject.services.ansService required a bean of type 'com.myproject.repositories.ansRepo' that could not be found.

У меня есть контроллер, который имеет 4 службы с автоматической аннотацией:

@RestController
public class Controller {


@Autowired
private AnsService ansService

@Autowired
private QService QService;

@Autowired
private UService UService;

Каждая из этих служб имеет аннотацию @Service:

@Service
public class ansService {

@Autowired
private AnsRepo ansrepo;

Каждый репозиторий также имеет аннотацию @Repository:

@Repository
public interface AnsRepo extends JpaRepository<Ans,Long> {
...
}

Ошибка появляется для первого объекта с автопроводкой в ​​контроллере, поэтому кажется, что приложение Spring не может найти классы с автопроводкой ..

Структура моего проекта:

-com.myproject
----Main.java
----controllers
------------Controller.java
----entities
------------ans.java
----repositories
------------ansRepo.java
----services
------------ansService.java

мой главный:

package com.postmalone.Application;

import org.springframework.boot.SpringApplication;

 @SpringBootApplication(scanBasePackages={"com.myproject.controllers", 
 "com.myproject.services", "com.myproject.repositories", 
 "com.myproject.entities"})

 public class Main {
 public static void main(String[] args) throws InterruptedException {
    SpringApplication.run(Main.class,args);

Я почти уверен, что проблема связана с аннотацией @SpringBootApplication. Я видел много сообщений об этой ошибке, но в моем случае я реализовал уже все решения, которые были предоставлены.

Есть идеи, что еще мне проверить?

---- UPDATE ---

Я добавил в свое главное приложение аннотацию @EnableJpaRepositories ("com.myproject.repositories"). Теперь я получил следующую ошибку:

Field ansRepo in com.postmalone.services.AnswService required a bean named 'entityManagerFactory' that could not be found.

Зависимости в моем файле pom.xml:

<dependencies>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.1.4</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.3.6.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>2.1.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.3.6.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>

</dependencies>

Есть идеи, почему мне нужно упомянуть аннотацию @EnableJPARepostiory, когда у меня есть приложение @SpringBootApplication? И почему я получаю эту ошибку?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Решением в моем случае было просто добавить следующую зависимость в pom.xml:

        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>

вместо:

    <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.3.6.Final</version>
</dependency>
0 голосов
/ 06 января 2019

Хорошо, я заметил, что у вас нет корневого пакета, который должен быть доступен для контроллеров, сущностей, репозиториев и сервисов. Для сканирования в начале корневого пакета, просто добавьте следующим образом:

 @SpringBootApplication(scanBasePackages = "com.myproject")

И переименуйте остальные пакеты следующим образом:

 com.myproject 
    >   Main.java
 com.myproject.controllers
    >   Controller.java
 com.myproject.entities
    >   Ans.java
 com.myproject.repositories
    >   AnsRepo.java
 com.myproject.services
    >   AnsService.java
...