Как использовать значение ключа для поиска по карте в HQL-запросе - PullRequest
0 голосов
/ 29 января 2019

В Java при наличии объектной книги с полями цена и имя и Map<Long, String> с объектами книги у меня возникают проблемы с предложением где я хочу сделать следующий запрос:

SELECT b FROM books
WHERE (b.price, b.name) IN ((20, 'book1'), (30, 'book2'), (15, 'book3')) 

Я не смог найти результат,пробовал HQL-запрос для пар идентификаторов / кортежей и Как проверить, существует ли пара с использованием HQL в запросе? и JPA-именованный запрос соответствует списку кортежей в предложении IN

1 Ответ

0 голосов
/ 18 апреля 2019

Большинство предикатов выражения значения строки являются просто синтаксическим сахаром для более подробного синтаксиса.В вашем случае:

SELECT * 
FROM books b
WHERE (b.price = 20 AND b.name = 'book1')
   OR (b.price = 30 AND b.name = 'book2')
   OR (b.price = 15 AND b.name = 'book3')

Обратите внимание, что если вы хотите динамически построить этот тип предиката, вам нужно либо написать конструктор SQL самостоятельно, сопоставить карту с набором строк SQL и связать переменную, либо использоватьсуществующий, такой как jOOQ

Если у вас есть более сложные синтаксисы, которые вы хотите эмулировать таким образом, вы можете использовать переводчик jOOQ SQL для перевода их из стандартного SQLк более основному SQL

(Отказ от ответственности: я работаю в компании за jOOQ)

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