【问题标题】:How use Hibernate Criteria with searching in Postgresql JSON and use with Lateral如何使用 Hibernate Criteria 在 Postgresql JSON 中进行搜索并与横向一起使用
【发布时间】:2017-09-26 10:37:08
【问题描述】:

在客户端,我们有使用过滤器进行搜索的端点。

在后端,我有在 Postgresql DB 中搜索的方法。选项之一 - 搜索 jsonb 字段。

在这一天之前,我搜索了 valueskeys。我的代码是:

if (appFilter.getSearchValue() != null) {
    criteria.add(Restrictions.sqlRestriction("UPPER(values::text) LIKE '%" + appFilter.getSearchValue().toUpperCase() + "%'"));
}

SQL 模拟(UPPER - 不是强制性的):

SELECT *
FROM application
WHERE UPPER(values :: TEXT) LIKE '%some text%'

现在我需要只搜索值。为此目的的 SQL 查询:

SELECT *
FROM application, LATERAL json_each_text(application.values :: JSON)
WHERE value :: TEXT LIKE '%some text%';

如何将其添加到限制中?也许还有其他用于搜索值的变体? 休眠 5.0.12

【问题讨论】:

    标签: java json postgresql hibernate hibernate-criteria


    【解决方案1】:

    Restrictions.sqlRestriction 将在 WHERE 子句之后用 AND 插入生成的 sql 中,因此您需要添加类似这样的内容

    criteria.add(Restrictions.sqlRestriction("this_.id IN (SELECT application.id FROM application , LATERAL json_each_text(values :: JSON) WHERE UPPER(value :: TEXT) LIKE '%" + appFilter.getSearchValue().toUpperCase() +"%')"));
    

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2018-04-28
      • 1970-01-01
      • 2013-09-16
      相关资源
      最近更新 更多