Я фильтрую значение «город», «роль» в фильтре. Я использую класс-обертку, поэтому не установка будет устанавливать ноль, и я могу использовать withIgnoreNullValues ()
Итак, я устанавливаю его в сущности
Employee emp = new Employee();
emp.setCity(city);
emp.setRole(role);
ExampleMatcher matcher = ExampleMatcher.matching().withIgnoreNullValues();
Example<Employee> criteria = Example.Of(emp, matcher);
Page<Employee> employeesList = employeeRepository.findAll(criteria, pageable);
Это работает, как ожидалось. Но теперь я хочу найти несколько ролей.
Значит, я пришлю «Менеджер», «Кассир» для роли и город «Дели». Таким образом, он должен показать всех сотрудников, имеющих Дели в качестве города, а роль менеджера или кассира
Я не смог найти никакого решения. По запросу это возможно, но я использую его для временной цели
Для нескольких ролей
SELECT e FROM Employee e
WHERE (e.role IN (:roles) OR nullif(CHOOSE(1,:roles),'') IS NULL) AND (e.city = :city OR :city IS NULL)
Любое другое хорошее решение?