Как создать общий репозиторий в Spring Boot, который принимает сущность и несколько атрибутов и возвращает все записи на основе атрибутов? - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу создать общий репозиторий, который принимает класс сущности и несколько атрибутов, таких как start_date и end_date и т. Д., И возвращает все записи в таблице.

Чтобы получить результаты для одной сущности, используя репозиторий Iнужно будет написать собственный запрос.Я не уверен, как написать общий запрос для любого объекта, который будет передан, и отфильтровать в соответствии с атрибутами.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Spring теперь поддерживает тип запроса на примере

Сервис:

Person person = new Person();
person.setFirstname("Dave");
Example<Person> example = Example.of(person); 

Интерфейс репо:

public interface QueryByExampleExecutor<T> {
   <S extends T> S findOne(Example<S> example);
   <S extends T> Iterable<S> findAll(Example<S> example);
}
0 голосов
/ 22 февраля 2019

Поскольку вы используете Spring Data JPA, вы можете объявить свой собственный интерфейс общего репозитория своими методами и избежать пользовательского запроса.Тот же подход используется CrudRepository для предоставления дополнительных методов, которых нет в Repsitory.

Например, вы можете объявить:

public interface SharedRepository<T, ID> extends CrudRepository<T, ID> {

  List<T> findByStartDateAndEndDate(LocalDate startDate, LocalDate endDate); 

}

Затем расширить этот новый интерфейс для ваших сущностей

@Repository
public interface PersonRepisotry extends SharedRepository<Person, Long> {

}

@Repository
public interface RoomRepository extends SharedRepository<Room, Long> {

}

И PersonRepository, и RoomRepository будут иметь findByStartDateAndEndDate метод.

...