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

问题描述 投票:0回答:1

这是我正在实施的。

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

java criteria criteria-api
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.