Как создать общий репозиторий в 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);
}