如何使用Hibernate Criteria在Postgresql JSON中搜索并与Lateral一起使用

时间:2017-09-26 10:37:08

标签: java json postgresql hibernate hibernate-criteria

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

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

在此之前,我搜索了。我的代码是:

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%'

现在我需要仅将搜索到值。这个purpouse的SQL查询:

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

如何将其添加到限制中?也许还有其他任何变种用于搜索价值观? Hibernate 5.0.12

1 个答案:

答案 0 :(得分:1)

Restrictions.sqlRestriction将在带有AND的WHERE子句之后插入生成的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() +"%')"));