#postgresql #spring-boot #hibernate #jpa #spring-data-jpa
Вопрос:
Что я пытаюсь сделать, так это следующее,
@Query(value = "SELECT * from my_table WHERE (column1, column2) in ((:#{#objs.value1}), (:#{#objs.value2}))", nativeQuery = true) Listlt;SomeObjectgt; findAll(Listlt;TestObjectgt; objs);
Класс TestObject выглядит следующим образом,
public class TestObject { String value1; String value2; }
Если мы предположим, что для значений 1 и 2 могут существовать следующие комбинации,
значение 1 | значение 2 |
---|---|
001 | 1111 |
001 | 2222 |
002 | 1111 |
Но я не хочу выбирать 002-2222. Если я использую отдельные IN
предложения для обеих столбцов с ан AND
, это также даст 002 — 2222. Что не является моим требованием.
Я не хочу точно делать это с помощью выражений SpEL. Любой подход хорош для этого.
Проблема с приведенным выше запросом заключается в том, что он пытается получить значения 1 и 2 из списка тестовых объектов, а не из каждого тестового объекта. Есть ли какой-нибудь способ сделать что-то подобное? :#{#objs.get(iteration).value2}
где iteration
— переменная, имеющая текущий номер элемента в списке.
Или можно просто сделать что-то вроде приведенного ниже?
@Query(value = "SELECT * from my_table WHERE (column1, column2) in (objs.value1, objs.value2)", nativeQuery = true) Listlt;SomeObjectgt; findAll(Listlt;TestObjectgt; objs);
В конце концов, если преобразованный sql выглядит так, как показано ниже, это должно быть нормально. Есть ли способ сделать это с помощью Spring JPA без передачи двух отдельных списков для значений 1 и 2?
SELECT * from my_table WHERE (column1, column2) in ((001, 1111), (001, 2222), (002, 1111))