Реализация сложной функции поиска с использованием Spring BOOT REST и Spring Data JPA с использованием API Criteria - PullRequest
0 голосов
/ 01 июня 2018

Мне нужно реализовать сложную функцию поиска, используя Spring Boot REST и Spring Data JPA , используя Criteria API.Мне нужно указать RPI, как показано ниже /college?select=*&where=name:DemoCollege и location:LA и staff{firstName:foo, lastName:boo, workExp>10}, и ввести [1,2,3]

У объекта коллажа есть name, location, type поля и staff список.Он onetomany связан с Staff, поэтому College может иметь одного или нескольких сотрудников.

на основе URI, который мне нужен для построения запроса с использованием критериев API.

Я нахожуочень сложно реализовать метод toPredicate() org.springframework.data.jpa.domain.Specification.Есть ли такой пример использования таких сложных поисковых фильтров?

Заранее спасибо.

1 Ответ

0 голосов
/ 01 июня 2018

Я думаю, что лучшим выбором в вашем случае является спецификации-arg-resolver lib, который предоставляет удобный способ декларативного построения спецификации.Например, этот код:

@RequestMapping("/customers")
public Object findByName(
        @And({
            @Spec(path="registrationDate", params="registeredBefore", spec=DateBefore.class),
            @Spec(path="lastName", spec=Like.class)}) Specification<Customer> customerSpec) {

    return customerRepo.findAll(customerSpec);
}

соответствует этому запросу:

GET http://myhost/customers?registeredBefore=2015-01-18&lastName=Simpson

Он поддерживает следующие спецификации: Like, LikeIgnoreCase, Equal, EqualIgnoreCase, In, Null, NotNull,GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual, DateBetween, Join, Join fetch и позволяет объединять их, составляя сложные выражения.


Другой вариант - Querydsl и Веб-поддержка Расширения Spring Data.Он также позволяет создавать «язык запросов REST», но имеет меньше возможностей.Вы можете прочитать в моем ответе, как его использовать: https://stackoverflow.com/a/48596145

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...