Я создаю 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?
Заранее спасибо :-)




Может быть, Criteria Api лучше для этого - вы получите программный способ управления ограничением (предложение where в sql). посмотрите на турориал: https://www.tutorialspoint.com/hibernate/hibernate_criteria_queries.htm
Criteria API - хороший вариант для решения этой проблемы (создайте запрос без определенных столбцов, если вы не хотите фильтровать его - это должно обрабатываться в вашем коде Java).
Но если вы хотите остаться с @Query, вы можете делегировать вычисление этого условия базе данных, создав запрос, подобный этому:
where (999999 = ?1 or field1 = ?1) and (999999 = ?2 or field2 = ?2)
Это приведет к тому, что поле запроса1 = :param1 будет вычисляться только тогда, когда :param1 не равно 999999.
Спасибо за предложение. Я прочитал учебник и смог написать код, который мне был нужен. Еще раз спасибо :-)