#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]));