我正在尝试使用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字段中具有该字符串的行。
答案 0 :(得分:0)
我让它像这样工作:
@Formula(value = "lower(jsonColumn::text)")
private String residuesToSearch;
只是一个简单的演员就可以了