带有 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”表达式的主要内容,如果未能解决你的问题,请参考以下文章

带有列表的 JPA CriteriaQuery 投影

从带有 WHERE 子句的 JSONB 字段中选择

带有 jsonb 参数的 Postgres 函数

如何查询带有数组的jsonb字段

plpgsql jsonb_set 用于带有嵌套数组的 JSON 对象数组

NullPointerException 与 Hibernate criteriaQuery 间歇性发生