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

标签 java json postgresql hibernate hibernate-criteria

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

在后端,我有在 Postgresql 数据库中搜索的方法。选项之一 - 搜索 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%'

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

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

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

最佳答案

Restrictions.sqlRestriction 将在 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() +"%')"));

关于java - 如何使用 Hibernate Criteria 在 Postgresql JSON 中进行搜索并与 Lateral 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46424138/

相关文章:

java - 获取 wso2 esb 中内存消息存储中的消息数

java - 如何在不同数据源上的两个类之间建立关系?

json - 导入空值的json数据

javascript函数没有被执行

postgresql - 无法使用 ASP.NET Core 和身份添加声明

java - Java 新手 - If - Else If 问题

java - Intellij idea 2022.1.3 ultimate 显示错误java : JPS incremental annotation processing is disabled

python - 如何将 JSON 数据加载到嵌套类中?

ruby - 准备好的语句已经存在

sql - 一个命令的交易