您的位置:首页 > 编程语言 > Java开发

spring-data-jpa Specification 拼接复杂查询

2016-04-11 16:42 1201 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: