jpa 多条件组合查询

PredicateBuilder<Project> builder = Specifications.<Project>and()
.eq(StringUtils.isNotBlank(year), "year", year)
.like(StringUtils.isNotBlank(projectCode), "projectCode", "%" + projectCode + "%")
.like(StringUtils.isNotBlank(projectName), "projectName", "%" + projectName + "%");

Specification<Project> spec = new Specification<Project>() {
@Override
public Predicate toPredicate(Root<Project> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Path<Object> workingPaper = root.get("workingPaper");
Path<Object> status = root.get("status");

//1.情况一
Predicate p1 = cb.equal(workingPaper, true);
Predicate p2 = cb.equal(status, ProjectStatus.EXECUTE_COMPLETE);
Predicate hasWorkingPaper = cb.and(p1, p2);

//2.情况二
Predicate p3 = cb.equal(workingPaper, false);
Predicate p4 = cb.equal(status, ProjectStatus.APPROVED);
Predicate noWorkingPaper = cb.and(p3, p4);

//3.情况三
Predicate p5 = cb.equal(status, ProjectStatus.RECTIFYING);
Predicate p6 = cb.equal(status, ProjectStatus.RECTIFIED);

Predicate all = cb.or(hasWorkingPaper, noWorkingPaper, p5, p6);
return all;
}
};

builder.predicate(spec);

posted on 2020-09-25 09:15  谦虚好学每一天  阅读(472)  评论(0)    收藏  举报

导航