Обработка вложенных свойств и игнорирование пустых параметров в репозитории - PullRequest
0 голосов
/ 13 марта 2020

В моем приложении у меня есть следующая конечная точка, которая принимает два обнуляемых параметра

@GetMapping
public Page<Foo> getAll(Pageable pageable,
                         @RequestParam(name = "city", required = false) String city,
                         @RequestParam(name = "active", required = false) Boolean active) {
        return fooService.getAll(pageable, city, active);
}

Мои объекты:

public class Foo {
    private boolean active;
    private Location location;
}
public class Location {
    private String city;
}

Мой вопрос: как для обработки вложенных свойств и игнорирования пустых параметров при перечислении из JpaRepository?

Использование методов запроса Мне бы пришлось обрабатывать все комбинации null / notnull вручную и создавать 2 ^ number_of_parameters методов в итоге получится что-то вроде этого:

if (city == null) {
            if (active == null) {
                return fooRepository.findAll(pageable);
            } else {
                return fooRepository.findAllByActive(active, pageable);
            }
        } else {
            if (active == null) {
                return fooRepository.findAllByLocation_City(city, pageable);
            } else {
                return fooRepository.findAllByLocation_CityAndActive(city, active, pageable);
            }
        }

Использование запроса на примере было бы хорошим решением, но оно не поддерживает вложенные свойства (city в Location в моем дело). Кроме того, я бы хотел избежать использования аннотации @Query, так как мы обычно не используем их в этом проекте.

Похоже, что каждый учебник и вопрос SO решают только одну из моих проблем (либо обработку пустых значений). или вложенные свойства). Я знаю, что Технические характеристики могут быть полезны здесь, но я не уверен, как правильно их использовать и работать с вложенными свойствами.

Любые советы будут высоко оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...