51 lines
1.6 KiB
Java
51 lines
1.6 KiB
Java
package com.baeldung.persistence.dao;
|
|
|
|
import org.springframework.data.jpa.domain.Specification;
|
|
|
|
import com.baeldung.persistence.model.User;
|
|
import com.baeldung.web.util.SpecSearchCriteria;
|
|
|
|
import javax.persistence.criteria.CriteriaBuilder;
|
|
import javax.persistence.criteria.CriteriaQuery;
|
|
import javax.persistence.criteria.Predicate;
|
|
import javax.persistence.criteria.Root;
|
|
|
|
public class UserSpecification implements Specification<User> {
|
|
|
|
private SpecSearchCriteria criteria;
|
|
|
|
public UserSpecification(final SpecSearchCriteria criteria) {
|
|
super();
|
|
this.criteria = criteria;
|
|
}
|
|
|
|
public SpecSearchCriteria getCriteria() {
|
|
return criteria;
|
|
}
|
|
|
|
@Override
|
|
public Predicate toPredicate(final Root<User> root, final CriteriaQuery<?> query, final CriteriaBuilder builder) {
|
|
switch (criteria.getOperation()) {
|
|
case EQUALITY:
|
|
return builder.equal(root.get(criteria.getKey()), criteria.getValue());
|
|
case NEGATION:
|
|
return builder.notEqual(root.get(criteria.getKey()), criteria.getValue());
|
|
case GREATER_THAN:
|
|
return builder.greaterThan(root.get(criteria.getKey()), criteria.getValue().toString());
|
|
case LESS_THAN:
|
|
return builder.lessThan(root.get(criteria.getKey()), criteria.getValue().toString());
|
|
case LIKE:
|
|
return builder.like(root.get(criteria.getKey()), criteria.getValue().toString());
|
|
case STARTS_WITH:
|
|
return builder.like(root.get(criteria.getKey()), criteria.getValue() + "%");
|
|
case ENDS_WITH:
|
|
return builder.like(root.get(criteria.getKey()), "%" + criteria.getValue());
|
|
case CONTAINS:
|
|
return builder.like(root.get(criteria.getKey()), "%" + criteria.getValue() + "%");
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
|
|
}
|