带有 CriteriaQuery 的 JSONB 列上的“LIKE”表达式
Posted
技术标签:
【中文标题】带有 CriteriaQuery 的 JSONB 列上的“LIKE”表达式【英文标题】:'LIKE' expression on JSONB column with CriteriaQuery 【发布时间】:2021-03-28 18:50:22 【问题描述】:我正在尝试将 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"]
;
查询应该是条件查询实例。
提前致谢。
【问题讨论】:
【参考方案1】:试试这样的:
select *
from customer
cross join lateral jsonb_array_elements(contacts) as x(jcontact)
where jcontact->>'value' like '%2%';
看看结果。如果有多个联系人具有value like '%2%'
,您将获得多行,但您可以消除具有distinct
的联系人并限制为您实际需要的列。
至于 HIbernate 或条件查询,我无法为您提供帮助。 ORM 是一个非常糟糕的主意。
【讨论】:
以上是关于带有 CriteriaQuery 的 JSONB 列上的“LIKE”表达式的主要内容,如果未能解决你的问题,请参考以下文章