Рабочий раствор доступен здесь . @Component
отсутствует в сущности.
Очевидно, что bean-компоненты следует вводить не так, как здесь, а создавать их экземпляры (например, marriot = new Hotel("Marriot", 5, true);
) и сохранять с помощью метода save
(или saveAll
для коллекции)
Внедрение сущностей с единственной целью инициализации неверно и не будет работать:
Один и тот же экземпляр будет повторно использоваться для каждого отеля.
@Autowired
private Hotel marriot, ibis, goldenTulip;
@Override
public void run(String... strings) throws Exception {
marriot.setName("Marriot");
marriot.setClassification(5);
marriot.setOpen(true);
ibis.setName("Ibis");
ibis.setClassification(3);
ibis.setOpen(false);
goldenTulip.setName("Golden Tulip");
goldenTulip.setClassification(4);
goldenTulip.setOpen(true);
List<Hotel> hotels = new ArrayList<>();
hotels.add(marriot);
hotels.add(ibis);
hotels.add(goldenTulip);
this.hotelRepository.saveAll(hotels);
}
Результатом будет сохранение одного объекта, так как все 3 отеля являются одним и тем же экземпляром. Таким образом, http://localhost:8080/hotels вернет:
[{"id":1,"name":"Golden Tulip","classification":4,"open":true}]
Пока это с экземпляром
@Override
public void run(String... strings) throws Exception {
marriot = new Hotel("Marriot", 5, true);
ibis = new Hotel("Ibis", 3, false);
goldenTulip = new Hotel("Golden Tulip", 4, true);
List<Hotel> hotels = new ArrayList<>();
hotels.add(marriot);
hotels.add(ibis);
hotels.add(goldenTulip);
this.hotelRepository.saveAll(hotels);
}
он вернется, как и 3 сущности:
[{"id":1,"name":"Marriot","classification":5,"open":true},{"id":2,"name":"Ibis","classification":3,"open":false},{"id":3,"name":"Golden Tulip","classification":4,"open":true}]
Это именно то, что я хотел увидеть здесь, но забыл добавить @Component
в класс Entity. Не должен этого делать!
EDIT:
Причиной попытки было использование сервисного уровня:
public interface NoteService {
List<Note> loadAll();
}
@Service
public class NoteServiceImpl implements NoteService {
@Autowired
private NoteRepository noteRepository;
@Override
public List<Note> loadAll() {
return noteRepository.findAll();
}
}
Что привело к сбою во время выполнения, Note
не является управляемым компонентом.