Как обрабатывать «ВСЕ» с помощью SQL-запроса внутри SPRING REST API?

Я создаю REST API для работы с приложением Android. Приложение для Android имеет выпадающие списки (спиннеры) и средства выбора даты, позволяющие выбирать параметры. Запрос обрабатывается и преобразуется в запросы SQL (Oracle 11g) с использованием аннотации @Query (...).

Проблема начинается, когда я хочу обработать опцию «ВСЕ» (взять все опции).

REST API — это JAVA Spring Boot и Hibernate. Android-приложение отправляет запрос с параметрами, а ответ представляет собой обычный JSON. Если пользователь выбирает «ВСЕ», значение параметра равно 999999 (при необходимости его можно изменить).

Так это выглядит: myurl/getinfo/2/4/999999/56

Я перепробовал много вариантов: ?1 для отправки всех условий, использовал % в качестве значения параметра, написал методы для построения собственного запроса в виде строки и отправки с использованием PreparedStatement. Ничего не работает. Всегда ошибки.

Может кто-нибудь просветить меня, как это вообще должно выглядеть? Как обрабатывать «ALL» в качестве параметра и как обрабатывать его с помощью Java Spring REST?

Заранее спасибо :-)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
235
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Может быть, Criteria Api лучше для этого - вы получите программный способ управления ограничением (предложение where в sql). посмотрите на турориал: https://www.tutorialspoint.com/hibernate/hibernate_criteria_queries.htm

Спасибо за предложение. Я прочитал учебник и смог написать код, который мне был нужен. Еще раз спасибо :-)

maciek 19.05.2019 19:03

Criteria API - хороший вариант для решения этой проблемы (создайте запрос без определенных столбцов, если вы не хотите фильтровать его - это должно обрабатываться в вашем коде Java).

Но если вы хотите остаться с @Query, вы можете делегировать вычисление этого условия базе данных, создав запрос, подобный этому:

where (999999 = ?1 or field1 = ?1) and (999999 = ?2 or field2 = ?2)

Это приведет к тому, что поле запроса1 = :param1 будет вычисляться только тогда, когда :param1 не равно 999999.

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