Я задаю этот вопрос с риском пометить его как дубликат, но я, честно говоря, не думаю, что это так, вот и он.
У меняпроблема с запуском основного приложения Spring Boot. Я получаю следующую ошибку:
Параметру 0 конструктора в com.example.demo.service.EventService требуется компонент типа 'com.example.demo.dao.EventRepository', который можетне найден.
Теперь это похоже на довольно распространенную ошибку (и вопрос по SO), которая должна указывать разработчику на проверку следующих проблем:
- Чаще всегоструктура проекта неверна (или, скажем, 'custom'), и bean-компонент не сканируется из-за иерархии [Вопросы: это , это , это , это и, вероятно, еще много]. Решение должно состоять в том, чтобы поместить SpringBootApplication в верхний пакет и все компоненты в его подпакеты, чтобы он мог сканировать все правильно или настраивать пакеты, которые должны быть проверены.
- Компонент не был определен, т. Е. Отсутствует аннотация типа @Service, @Repository и т. Д., Поэтому компонент не создается.
- Другая причина может заключаться в использовании двух разных способов определения bean-компонентов (как указано здесь ). Я использую чисто аннотационное определение стиля, так что я думаю, что здесь должно быть хорошо.
Кроме того, этот вопрос содержит ответ, в котором упоминается исключение автоконфигурации репозиториев JPA из файла application.properties
, но у меня нет этой конфигурации.
Была также пара вопросов / ответов, в которых упоминались проблемы с зависимостями, и файл pom.xml
, который исправил эту проблему, но мой pom.xml
- довольно простой файл, созданный из Spring Initializr, поэтому, опять же, я не думаю, что эторешение.
В сообщении об ошибке также говорится:
Рассмотрите возможность определения bean-компонента типа 'com.example.demo.dao.EventRepository' в вашей конфигурации.
В этом репозитории «пропущен бин»:
package com.example.demo.dao;
import com.example.demo.entity.Event;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EventRepository extends JpaRepository<Event, Integer> {
}
Вы можете видеть, что у него есть аннотация @Repository (хотя раньше я создавал репозитории без этой аннотации, и она работала нормально, поэтому я недумаю, что это необходимо, но я добавил это сейчас на всякий случай, если это было проблемой), он расширяет JpaRepository, поэтому он должен быть действительным хранилищем, и он находится внутри com.example.demo.dao package.
Класс, который автоматически подключается, это сервис:
package com.example.demo.service;
import com.example.demo.dao.EventRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EventService {
EventRepository eventRepository;
@Autowired
public EventService(EventRepository eventRepository) {
this.eventRepository = eventRepository;
}
}
Я также предоставлю основное приложение, чтобы вы могли видеть его пакет com.example.demo , который является родительским пакетом как для службы, так и для хранилища:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Я также пытался пересоздать проект и печально известное «закрытие и повторное открытие» IntelliJ, поскольку он был известен иногдаглупо в моем опыте, и это решило бы это, но не в этот раз.
Кроме того, как примечание, я успешно создавал подобные проекты раньше, поэтому я действительно не уверен, в чем проблема прямо сейчас.
Я что-то упускаю здесь очевидное? Что еще я могу проверить?
РЕДАКТИРОВАТЬ:
Вот также класс сущности (генерируется инструментом IDE):
package com.example.demo.entity;
import javax.persistence.*;
import java.sql.Timestamp;
import java.util.Objects;
@Entity
public class Event {
private int id;
private String name;
private Timestamp dateFrom;
private Timestamp dateTo;
// getters & setters abstracted
}