JPA CriteriaQuery 实现 Spring Data Pageable.getSort() [英] JPA CriteriaQuery implements Spring Data Pageable.getSort()

查看:28
本文介绍了JPA CriteriaQuery 实现 Spring Data Pageable.getSort()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 JPA CriteriaQuery 来构建我的动态查询并传入一个 Spring Data Pageable 对象:

I used JPA CriteriaQuery to build my dynamic Query and pass in a Spring Data Pageable object:

sort=name,desc

在后端,我的存储库中有一个方法来支持动态查询:

At the backend I have a method in my Repository to support dynamic query:

public Page<User> findByCriteria(String username, Pageable page) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<User> cq = cb.createQuery(User.class);
    Root<User> iRoot = cq.from(User.class);
    List<Predicate> predicates = new ArrayList<Predicate>();

    if (StringUtils.isNotEmpty(username)) {
        predicates.add(cb.like(cb.lower(iRoot.<String>get("username")), "%" + username.toLowerCase() + "%"));
    }

    Predicate[] predArray = new Predicate[predicates.size()];
    predicates.toArray(predArray);

    cq.where(predArray);

    TypedQuery<User> query = em.createQuery(cq);

    int totalRows = query.getResultList().size();

    query.setFirstResult(page.getPageNumber() * page.getPageSize());
    query.setMaxResults(page.getPageSize());

    Page<User> result = new PageImpl<User>(query.getResultList(), page, totalRows);

    return result;
}

注意:为了演示目的,我只放了一个参数.

Note: I put only one param for demo purpose.

然而,返回的数据是未排序的,因此我想问的是在 CriteriaQuery 中实现 Pageable 的任何方式.

However the returned data is unsorted therefore I would like to ask is that any way to implement Pageable in CriteriaQuery.

推荐答案

您可以从 spring 使用 QueryUtils 添加排序:query.orderBy(QueryUtils.toOrders(pageable.getSort(), root, builder));

You can add sorting using QueryUtils from spring: query.orderBy(QueryUtils.toOrders(pageable.getSort(), root, builder));

这篇关于JPA CriteriaQuery 实现 Spring Data Pageable.getSort()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆