我正在尝试将JSONB与CriteriaQuery一起使用,并尝试根据标准生成器来实现此查询
select *
from customer
where exists (
select true
from jsonb_array_elements(customer.contacts::jsonb)
where value::text like '%2%'
);
但在条件查询中,似乎并没有办法从函数执行结果中关联子查询。
您知道如何在条件查询中实现此查询,或者如何针对JSONB列生成"LIKE"表达式吗?
JSONB列的格式如下:[{"type": "PHONE", "value": "1122"}, {"type": "PHONE", "value": "3344"}]
;
查询应该是一个条件查询实例。
提前谢谢。
试试这样的东西:
select *
from customer
cross join lateral jsonb_array_elements(contacts) as x(jcontact)
where jcontact->>'value' like '%2%';
看看结果。如果有多个联系人具有value like '%2%'
,则会得到多行,但您可以消除具有distinct
的联系人,并将其限制为实际需要的列。
至于HIbernate或criteriaquery,我在这方面帮不了你。ORM是个非常糟糕的主意。