【问题标题】:Is there any way to search within postgres JSONB array column using Criteria API?有没有办法使用 Criteria API 在 postgres JSONB 数组列中搜索?
【发布时间】:2022-08-12 13:33:31
【问题描述】:

我想创建读取和比较电子邮件的谓词,因此我可以使用 Java 中的 Criteria API 过滤掉结果。

为此,我使用了下面的代码但没有用。 错误:原因:org.postgresql.util.PSQLException:错误:在 WHERE 中不允许设置返回函数

Expression<String[]> expressions = criteriaBuilder.function(\"jsonb_array_elements\",
                                String[].class, entity.<String>get(column_name)
                        );
                        Expression<?>[] expressions1 = {expressions, criteriaBuilder.literal(\"characteristic\"), criteriaBuilder.literal(\"email\")};
                        toPredicate(entity, searchText.toLowerCase(), expressions1);
                        
                        
public Predicate toPredicate(Root<TeamMember> root, String value, Expression<?>[] args) {
        Expression<String> function = criteriaBuilder.function(\"jsonb_extract_path_text\",
                String.class, args
        );
        return criteriaBuilder.like(
                function,
                \"%\" + value + \"%\"
        );
    }

我的 JSON 对象如下所示:

[
  {
    \"id\": \"1234\",
    \"validFor\": {
      \"endDateTime\": null,
      \"startDateTime\": \"2018-08-12T06:54:31.610218300Z\"
    },
    \"preferred\": true,    
    \"characteristic\": {
      \"email\": \"abcd@gmail.com\"
    }
  },
  {
    \"id\": \"5678\",
    \"validFor\": {
      \"endDateTime\": null,
      \"startDateTime\": \"2019-09-15T06:54:31.610218300Z\"
    },
    \"preferred\": true,    
    \"characteristic\": {
      \"email\": \"xyz@gmail.com\"
    }
  }
]

    标签: java postgresql spring-data-jpa criteria hibernate-criteria


    【解决方案1】:

    @Harsh我也遇到了同样的错误..你解决了这个问题吗?如果是这样,你能分享一下你做了什么吗?

    【讨论】:

    猜你喜欢
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2019-03-21
    相关资源
    最近更新 更多