使用Predicate查询时,如果不分页,但是要排序,此时pageable无法使用。可以使用如下方法:
- Specification<UserModel> spec = new Specification<UserModel>() {
- public Predicate toPredicate(Root<UserModel> root,
- CriteriaQuery<?> query, CriteriaBuilder cb) {
- Predicate p1 = cb.like(root.get("name").as(String.class), "%"+um.getName()+"%");
- Predicate p2 = cb.equal(root.get("uuid").as(Integer.class), um.getUuid());
- Predicate p3 = cb.gt(root.get("age").as(Integer.class), um.getAge());
- //把Predicate应用到CriteriaQuery中去,因为还可以给CriteriaQuery添加其他的功能,比如排序、分组啥的
- query.where(cb.and(p3,cb.or(p1,p2)));
- //添加排序的功能
- query.orderBy(cb.desc(root.get("uuid").as(Integer.class)));
- return query.getRestriction();
- }
- };