Как передать объекты или сгруппированные параметры в предложение SQL IN? - PullRequest
0 голосов
/ 13 июня 2018

Мне нужно использовать JPA для поиска записей, сопоставляя 2 сгруппированных параметра из таблицы, но моя проблема в том, что я не знаю, как передать объект или сгруппированный параметр в SQL, если это вообще возможно.

Допустим, у нас есть таблица User:

USER_TABLE

name VARCHAR,
email VARCHAR,
address VARCHAR

Мне нужно найти всех пользователей, где сгруппированные имя и адрес электронной почты совпадают.Примерно так:

SELECT FROM USER_TABLE 
WHERE (name, email) 
IN (('John', 'john@mail'), ('Oliver', 'oliver@mail'));

Он работает в инструменте SQL, но теперь мне нужно использовать этот SQL из Java

Для этого я обновил его, чтобы принять параметр

SELECT FROM USER_TABLE 
WHERE (name, email) 
IN (?);

Итак, мой вопрос: КАК передать параметры или чтобы они были сгруппированы?

Я попытался создать параметр, как показано ниже, но он не будет работать, потому что это недопустимый тип

String param = "('John', 'john@mail'), ('Oliver', 'oliver@mail')";
db.execute(sql, param)

Возможно ли это вообще?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы делаете это следующим образом:

SELECT FROM USER_TABLE 
WHERE (name, email) 
IN ((?, ?), (?, ?));

Каждый параметр заменяет одиночное скалярное значение , а не список значений и никакой другой синтаксис SQL, такой как скобки.Вам нужно поместить все символы в подготовленную выписку, а затем использовать параметры только для значений.

0 голосов
/ 13 июня 2018

использовать jpa Query, что-то вроде этого:

@ Query ("выберите * из списка пользователей, где s.id in (: ids)")

Page methodName (@Param (значение)= "идентификаторы") Список идентификаторов);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...