如何在Criteria API的like子句中传递多个值?

时间:2019-03-19 06:44:42

标签: java criteria criteria-api

这就是我要实现的。

    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运算符。请帮忙。

1 个答案:

答案 0 :(得分:0)

示例中给出的实际代码并不显示谓词的使用。那就是问题所在。我认为这相当于相当典型:

//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);