Есть ли способ динамически генерировать Spring Data Jpa запросы? - PullRequest
0 голосов
/ 01 октября 2019

Я пишу приложение, используя Spring Boot, Spring Data. И я пытаюсь реализовать функцию фильтрации на основе различных параметров фильтра.

Используя запросы Spring Data, мы можем определить довольно сложную логику, например:

@Query("SELECT u FROM User u WHERE u.status = 1")
Collection<User> findAllActiveUsers();

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

Прямо сейчас параметры фильтра отправляются в объекте json, который я анализирую и извлекаю, иРезультат sql запроса может быть примерно таким:

SELECT * FROM table
WHERE field1 != `value1` and (field1 != ` value2 `OR (field1 = `value3` AND filed2 < 3))
AND field2 != 99

Можно ли генерировать динамически сложные запросы с неопределенным (до фактического запроса фильтра, во время выполнения) количеством параметров, где предложения и другие вещи?

Ответы [ 4 ]

1 голос
/ 01 октября 2019

Я использую этот активный проект RSQL для JPA

https://github.com/perplexhub/rsql-jpa-specification

0 голосов
/ 02 октября 2019

Для создания безопасного типа вы можете использовать FluentJPA .

0 голосов
/ 01 октября 2019

Я бы предложил использовать Spring JPA Спецификация ref: https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

0 голосов
/ 01 октября 2019

Некоторое время назад я написал статью о JPA-запрос Spring Data с предложением Dynamic Where . В этом примере вы можете отправить предложение Where и карту параметров для этого. Вы можете использовать это и изменить его в соответствии с вашими потребностями.

...