Предикаты JPA — 0 в спецификациях дают 0 результатов

#spring #jpa #predicate #specifications

Вопрос:

Я пытаюсь отфильтровать по имени группу людей, используя спецификации JPA и метод findAll моего репозитория.

     @Entity
    class Person{
        @Id
        Long id;
        String name;
        String lastName;
    }

    String nameFilter // method param, can be null and empty
    personRepository.findAll((Specification<Person>)(root, query, cb) -> {
      List<Predicate> predicates = new ArrayList<>();
      if(nameFilter != null amp;amp; !nameFilter.trim().isEmpty()){
         predicate.add(cb.like(cb.upper(root.get("name")), "%"   nameFilter.trim()   "%");
         predicate.add(cb.like(cb.upper(root.get("lastName")), "%"   nameFilter.trim()   "%"); 
       }
      return cb.or(predicates.toArray(new Predicate[predicates.size()]));
    })
 

Когда фильтр имен имеет некоторое значение, я получаю результаты, как и ожидалось, но когда в список не добавляется предикат, то результат метода findAll содержит 0 элементов (в таблице есть элементы).

Я тоже пытался

 return cb.or(predicates.toArray(new Predicate[0]));