Я использую JPQL для написания SQL-запросов в интерфейсе JPA CurdRepository
. Мне удалось написать более одного запроса с именованными параметрами, и они работают как шарм.
Однако мое приложение требует, чтобы я сопоставил неизвестное количество строк с несколькими столбцами в таблице. Насколько мне известно, в SQL это будет выглядеть примерно так:
SELECT * FROM TABLE WHERE COLUMN_1 LIKE "%string_1%" OR COLUMN_1 LIKE"%string_2%" ... OR COLUMN_2 LIKE "%string_1%" OR COLUMN_2 LIKE "%string_2%" ... ...
Я пробовал это в MySQL, и он отлично работает. Однако я не мог понять, как изобразить это в JPQL. Я смог передать несколько значений для предложения IN
, установив для именованного параметра значение List
следующим образом:
@Query("SELECT t FROM Table t WHERE TABLE_ID IN (:table_ids)")
public Page<Table> findByParameters(@Param("table_ids") List<Integer> table_ids, Pageable page)
Я пытался сделать то же самое с предложением LIKE
, но я получаю 0 результатов, если я передал более 1 значения. Я сталкиваюсь с той же проблемой с предложением LOCATE
.
В худшем случае я могу настроить один запрос, который работает с одной строкой, и вызвать его несколько раз, а затем объединить все результаты. Однако я бы предпочел этого избежать, так как это было бы не более чем решение для клейкой ленты.
Я часами искал решения в Интернете, но не нашел ничего, что отвечало бы моей проблеме. Любой совет высоко ценится.
Спасибо.