Как создать общий репозиторий в Spring Boot, который принимает сущность и несколько атрибутов и возвращает все записи на основе атрибутов?

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

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

2 ответа

Поскольку вы используете 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 метод.

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);
}
Другие вопросы по тегам