Spring CriteriaBuilder игнорирует нулевые значения - PullRequest
0 голосов
/ 22 марта 2019

Я создаю CriteriaBuilder для своих GeoMaps.Но эти критерии не обязательны и могут получить значение null.Я пытаюсь построить с различными поисковыми запросами, но я думаю, что это не лучший способ.Есть ли лучший способ сказать мой CriteriaBuilder, если значение равно нулю, вы должны игнорировать это при поиске?

Пример фильтра:

UserSpecification specName =
                    new UserSpecification(new SearchCriteria("name", ":", data.getName()));
UserSpecification specEnv =
                    new UserSpecification(new SearchCriteria("env", ":", data.getEnv()));

...

if(data.getEnv().isEmpty()){
    List list = gisMapRepository.findAll(Specification.where(specName));
}

Userspecification.java:

public class UserSpecification implements Specification<GeoMap> {

    private SearchCriteria criteria;
    public UserSpecification(SearchCriteria criteria) {
        this.criteria = criteria;
    }

    @Override
    public Predicate toPredicate
            (Root<GeoMap> root, CriteriaQuery<?> query, CriteriaBuilder builder) {

        if (criteria.getOperation().equalsIgnoreCase(":")) {
            if (root.get(criteria.getKey()).getJavaType() == String.class) {
                return builder.like(
                        root.<String>get(criteria.getKey()), "%" + criteria.getValue() + "%");
            } else {
                return builder.equal(root.get(criteria.getKey()), criteria.getValue());
            }
        }

    ...

1 Ответ

0 голосов
/ 22 марта 2019
public class UserSpecification implements Specification<GeoMap> {

    private SearchCriteria criteria;
    public UserSpecification(SearchCriteria criteria) {
        this.criteria = criteria;
    }

    @Override
    public Predicate toPredicate
            (Root<GeoMap> root, CriteriaQuery<?> query, CriteriaBuilder builder) {

        if (criteria.isEmpty()) return null;

        //.. search something

    }
}

Тогда

UserSpecification specName =
                    new UserSpecification(new SearchCriteria("name", ":", data.getName()));
UserSpecification specEnv =
                    new UserSpecification(new SearchCriteria("env", ":", data.getEnv()));

...

List list = gisMapRepository.findAll(Specification.where(specName).and(specEnv));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...