Я создаю 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());
}
}
...