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);
浙公网安备 33010602011771号