Могу ли я иметь один интерфейс репозитория JPA, обрабатывающий несколько классов сущностей с использованием Spring Data JPA? - PullRequest
0 голосов
/ 26 марта 2020

Я не очень люблю Spring Data JPA , и у меня возникает следующая проблема при работе с Spring Boot проектом.

У меня есть следующие архитектурные сомнения по поводу того, как правильно обрабатывать подобные ситуации:

У меня есть репозиторий, реализованный с помощью такого интерфейса, в котором я определяю свои «методы запроса»:

public interface ExcelRepository extends CrudRepository<Country, Integer> {

    public List<Country> findAllByOrderByCountryNameAsc();

    public List<BlockAttackDetail> findAllByOrderByAttackTypeAcronymAsc();
}

Как видите, я расширяю интерфейс CrudRepository , и я указал один класс модели с именем ** Country *, отображающий таблицу спецификаций c в моей базе данных.

Я добавил второй метод, работающий с другим классом сущностей ( BlockAttackDetail ), отображающий другую таблицу базы данных.

Поэтому, запуская мое приложение, я получаю эту ошибку, поскольку этот репозиторий предназначен только для Таблица базы данных, отображаемая классом сущностей Страна :

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property attackTypeAcronym found for type Country!

Моя проблема заключается в следующем: нужно ли мне создавать несколько интерфейсов репозиториев JPA (по одному для каждой сущности) или существовать способ иметь один Интерфейс репозитория JPA, работающий с несколькими классами сущностей?

В моем конкретном случае c у меня будет несколько методов, которые будут взаимодействовать с указанной c таблицей базы данных (с сущностью), и у меня есть один интерфейс хранилища, обрабатывающий несколько классов сущностей (чтобы избежать путаницы).

Могу ли я сделать это каким-то образом? И если я могу сделать это, имеет смысл с архитектурной точки зрения или лучше иметь специфический c интерфейс репозитория JPA для каждого класса сущностей?

1 Ответ

3 голосов
/ 26 марта 2020

Согласно документации Spring Data у вас должен быть один репозиторий для каждой сущности

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories .definition

В вашем случае единственный способ выполнить вашу работу - это с данными пружины JPA:

public interface CountryRepository extends CrudRepository<Country, Integer> {

   public List<Country> findAllByOrderByCountryNameAsc();
}

public interface BlockAttackDetailRepository extends CrudRepository<BlockAttackDetail, Integer> {

   public List<BlockAttackDetail> findAllByOrderByAttackTypeAcronymAsc();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...