Как передать множественное значение в подобное предложение Criteria api? - PullRequest
0 голосов
/ 19 марта 2019

Вот то, что я реализую.

    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 + "%"));
    }

Я хочу применить подобное предложение к списку значений, но к нему добавляется все Predicate с оператором AND.пожалуйста, помогите.

1 Ответ

0 голосов
/ 22 марта 2019

На самом деле код, приведенный в примере, не показывает использование предикатов.Вот где проблема.Я предполагаю, что это эквивалентно довольно типичному:

//conjunction, will combine with 'AND'
query.where(predicates.toArray(new Predicate[0]));

Поскольку задокументировано , оно объединит предикаты с AND:

Измените запрос наограничить результат запроса в соответствии с указанными предикатами ограничения

Один из способов объединения предикатов с OR заключается в простом использовании CriteriaBuilder. или :

//disjunction, will combine with 'OR'
Predicate firstNameLikeAnyOf = cb.or(predicates.toArray(new Predicate[0]));
query.where(firstNameLikeAnyOf);
...