这是我正在实施的。
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> userRoot = query.from(User.class);
List<Predicate> predicates = new ArrayList<>();
Expression<String> userExpression = statusRoot.get("firstName");
for (String str : firstNames) {
predicates.add(cb.like(userExpression, "%" + str + "%"));
}
我想在值列表中应用like子句,但是它附加所有带有AND运算符的谓词。请帮忙。
实际上,示例中给出的代码不显示谓词的使用。这就是问题所在。我认为它相当于典型的:
//conjunction, will combine with 'AND'
query.where(predicates.toArray(new Predicate[0]));
作为documented,它将谓词与AND
结合:
修改查询以根据指定的限制谓词的组合限制查询结果
将谓词与OR
结合起来的一种方法就是使用CriteriaBuilder.or:
//disjunction, will combine with 'OR'
Predicate firstNameLikeAnyOf = cb.or(predicates.toArray(new Predicate[0]));
query.where(firstNameLikeAnyOf);