Criteria Builder查询json字段中的LIKE

时间:2019-02-18 11:44:59

标签: spring postgresql hibernate criteria-api

我正在尝试使用Criteria Builder(LIKE)建立查询,以在JSONARRAY字段中查找这样的字符串:

    [
      {
         "family_class": "Electric",
         "family_name": "lightBulb"
       },
      {
         "family_class": "Others",
         "family_name": "Oil"
       }  
     ]

一种选择是查找family_name属性,或者检查其中是否包含字符串。

    if (residues != null && residues.length > 0) {


            List<Predicate> predicates = new ArrayList<Predicate>();

            for (String residue : residues) {
                predicates.add(cb.like(root.get("jsonColumn"), residue.toLowerCase()));

            } 


            cr.select(root).where(predicates.toArray(new Predicate[] {}));

            Query<SyncCollectionPoints> q = sess.createQuery(cr);

            List<SyncCollectionPoints> result= q.getResultList();

这是我得到的错误:

Unrecognized token 'oil': was expecting ('true', 'false' or 'null')

我只想返回jsonColumn字段中具有该字符串的行。

1 个答案:

答案 0 :(得分:0)

我让它像这样工作:

@Formula(value = "lower(jsonColumn::text)")
private String residuesToSearch;

只是一个简单的演员就可以了