Specification<Agreement> specification = (root, query, cb) -> {
List<Predicate> list = new ArrayList<>();
List<Predicate> listOr = new ArrayList<>();
Predicate p1 = cb.equal(root.get("isDeleted").as(Integer.class), AssetsConstant.NO);
list.add(p1);
Predicate p2 = cb.equal(root.get("status").as(Integer.class), AgreementVo.WAIT_TYPE);
list.add(p2);
// 协议状态
if (StringUtils.isNotEmpty(form.getAuditStatus())) {
String[] split = form.getAuditStatus().split(",");
for (String s : split) {
Predicate p = cb.equal(root.get("auditStatus").as(Integer.class), s);
listOr.add(p);
}
}
// 用户
if (user != null) {
if (AssetsConstant.QP_TYPE.equals(user.getType())) {
// qp
Join<Agreement, Product> productJoin = root.join("product", JoinType.INNER);
Join<Product, User> userJoin = productJoin.join("user", JoinType.INNER);
Predicate p = cb.equal(userJoin.get("id").as(Long.class), user.getId());
list.add(p);
} else if (AssetsConstant.LP_TYPE.equals(user.getType())) {
// lp
Join<Agreement, User> join = root.join("lpUser", JoinType.INNER);
Predicate p = cb.equal(join.get("id").as(Long.class), user.getId());
list.add(p);
}
}
Predicate[] preOr = new Predicate[listOr.size()];
Predicate or = cb.or(listOr.toArray(preOr));
Predicate[] pre = new Predicate[list.size()];
Predicate and = cb.and(list.toArray(pre));
query.where(and, or);
List<Order> orderList = new ArrayList<>();
orderList.add(cb.desc(root.get("createDate")));
return query.orderBy(orderList).getRestriction();
};
jpa or语句
最新推荐文章于 2022-09-16 15:39:18 发布