Как фильтровать по нескольким комбинациям значений для предложения where в Spring JPA с помощью Postgres

#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))