Spring CRUDRepository findBy по нескольким полям

если мой EmployeeEntity содержит несколько полей:

first_name
last_name
department
office_name
state,
etc..

есть ли способ, которым я могу иметь ТОЛЬКО ОДИН интерфейс find...() в моем интерфейсе CRUDRepository для поиска сотрудников на основе параметров запроса без жесткого кода интерфейса?

http://localhost:8080/employees?last_name='me'&state='tx'

или

http://localhost:8080/employee?state='tx'&office_name='alpha'

Ты так выглядишь findOneByStateAndofficeName(String state,State officeName)?

soorapadman 27.03.2019 13:19

Нет. Я предпочитаю НЕ создавать этот интерфейс заранее. поскольку класс сущности может иметь дополнительные поля, добавленные к нему позже. или создать несколько комбинаций интерфейсов.

TX T 27.03.2019 13:23

Похоже, вам нужно подумать примерно так: baeldung.com/hibernate-поиск

soorapadman 27.03.2019 13:35
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
1
3
3 241
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать QueryDSL для динамического создания любых запросов в вашем репозитории на основе ваших полей сущности.

Чтобы интегрировать его с Spring Data JPA, добавьте в свой проект следующие две зависимости и процессор аннотаций JPA:

<dependency> 
    <groupId>com.querydsl</groupId> 
    <artifactId>querydsl-apt</artifactId> 
    <version>4.1.4</version>
    </dependency>
<dependency> 
    <groupId>com.querydsl</groupId> 
    <artifactId>querydsl-jpa</artifactId> 
    <version>4.1.4</version> 
</dependency>

<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>apt-maven-plugin</artifactId>
    <version>1.1.3</version>
    <executions>
        <execution>
            <goals>
                <goal>process</goal>
            </goals>
            <configuration>
                <outputDirectory>target/generated-sources/java</outputDirectory>
                <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
            </configuration>
        </execution>
    </executions>
</plugin>

…и расширите свой репозиторий таким образом:

public interface EmployeeRepository extends JpaRepository<EmployeeEntity, Long>, 
  QuerydslPredicateExecutor<EmployeeEntity>, QuerydslBinderCustomizer<QEmployeeEntity> {
}

Теперь вы можете выражать все виды комбинаций запросов:

BooleanExpression name = QEmployeeEntity.employeeEntity.last_name.eq("brawn");
BooleanExpression stateAndName = QEmployeeEntity.employeeEntity.state.eq("tx").and(name);

Please consult also the Spring Data JPA reference manual for further features.

Другие вопросы по теме