public Page<ServiceItem> findAll(Map<String, String[]> params, ServiceItemConsumeStatus serviceItemConsumeStatus,ServiceItemStatus serviceItemStatus, Pageable pageable) {
return dao.findAll(spec(serviceItemConsumeStatus, serviceItemStatus, params), pageable);
}
private Specification<ServiceItem> spec(final ServiceItemConsumeStatus serviceItemConsumeStatus,
final ServiceItemStatus serviceItemStatus, Map<String, String[]> params) {
Collection<SearchFilter> filters = SearchFilter.parse(params).values();
final Specification<ServiceItem> fsp = SearchFilter.spec(filters, ServiceItem.class);
Specification<ServiceItem> sp = new Specification<ServiceItem>() {
public Predicate toPredicate(Root<ServiceItem> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Predicate pred = fsp.toPredicate(root, query, cb);
if (ServiceItemConsumeStatus.可消费.equals(serviceItemConsumeStatus)) {
pred = cb.and(pred, cb.gt(root.get("countLeft").as(int.class), 0));
} else if (ServiceItemConsumeStatus.消费完毕.equals(serviceItemConsumeStatus)) {
pred = cb.and(pred, cb.le(root.get("countLeft").as(int.class), 0));
}
if (serviceItemStatus != null) {
pred = cb.and(pred, cb.equal(root.get("status"), serviceItemStatus));
}
return pred;
}
};
return sp;
}
spring-data-jpa Specification 拼接复杂查询
最新推荐文章于 2024-06-17 16:04:27 发布