Запрос Criteria Builder как в поле json - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь создать запрос с помощью 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 голосов
/ 18 февраля 2019

Я сделал так, чтобы это работало так:

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

просто бросок сделал свое дело

...