Как сделать запрос в jsonb postgresql и преобразовать в предикат JPA - PullRequest
0 голосов
/ 22 марта 2020

я застрял:)

кто-нибудь знает, как запрос postgresql в jsonb у меня есть таблица USER

  • INT id,
  • Varchar name,
  • jsonb categoryId

пример данных в поле categoryId, как это = [1,2,3,4,5]

Я пробовал этот запрос, который работает:

select * 
from user where categoryId @> '2'::jsonb ;  

но как сделать запрос с несколькими параметрами, такими как

select * 
from user 
where categoryId @> '1,3,4'::jsonb

, и я буду реализовывать это в hibernate jpa / jpql-предикат, но я хочу сначала узнать собственный запрос

Спасибо большое

1 Ответ

0 голосов
/ 22 марта 2020

В SQL вы можете использовать ?| оператор для этого

select *
from "user"
where categoryid ?| array['1','3','4'];

, который будет возвращать строки, в которых хотя бы одно из значений содержится в JSON массив. Если вы хотите найти те, которые содержат все значения, используйте вместо этого оператор ?&.


Чтобы использовать оператор @>, вам нужно будет использовать JSON массив справа:

select *
from "user"
where categoryid @> '[1,3,4]'::jsonb

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

...