我使用JPA CriteriaQuery构建我的动态Query并传入Spring Data Pageable对象:
sort=name,desc
在后端,我的存储库中有一个方法来支持动态查询:
public PagefindByCriteria(String username, Pageable page) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(User.class); Root iRoot = cq.from(User.class); List predicates = new ArrayList (); if (StringUtils.isNotEmpty(username)) { predicates.add(cb.like(cb.lower(iRoot. get("username")), "%" + username.toLowerCase() + "%")); } Predicate[] predArray = new Predicate[predicates.size()]; predicates.toArray(predArray); cq.where(predArray); TypedQuery query = em.createQuery(cq); int totalRows = query.getResultList().size(); query.setFirstResult(page.getPageNumber() * page.getPageSize()); query.setMaxResults(page.getPageSize()); Page result = new PageImpl (query.getResultList(), page, totalRows); return result; }
注意:我只为演示目的放了一个参数.
但是返回的数据是未排序的,因此我想问一下在CriteriaQuery中实现Pageable的任何方法.