当前位置: 首页 > 知识库问答 >
问题:

JPA CriteriaQuery实现Spring数据pageable.getsort()

杜河
2023-03-14

我使用JPA CriteriaQuery构建动态查询,并传入一个Spring数据分页对象:

sort=name,desc

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

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;
}

但是,返回的数据是未排序的,所以我想问的是,在CriteriaQuery中实现分页的任何方法。

共有1个答案

田博超
2023-03-14

您可以使用Spring中的QueryUtils添加排序:query.orderby(QueryUtils.toOrders(Pageable.getSort(),root,builder));

 类似资料:
  • 问题是如何在例如主详细表上实现数据变化的跟踪,即Spring Boot/Spring数据中一对多关系中的两个实体。 在存储数据后,能够获得主实体及其特定版本的详细信息,并具有将其还原到特定版本的功能。

  • 我正在尝试实现一个Spring Cloud数据流,它从数据库中读取记录,将这些记录传递给转换为Avro模式的处理器,然后将其传递给接收器应用程序使用。 我有数据从SQL数据库流向我的源应用程序,并通过Kafka绑定器传递数据,没有问题,我遇到了问题,将数据从处理器发送到Sink应用程序序列化/反序列化与Avro。 我创建了一个名为ech的avro模式。avsc和已使用处理器内的avro maven

  • 本文向大家介绍Spring mvc如何实现数据处理,包括了Spring mvc如何实现数据处理的使用技巧和注意事项,需要的朋友参考一下 处理提交数据 1、提交的域名称和处理方法的参数名一致 提交数据 : http://localhost:8080/hello?name=xiaohua 处理方法 : 后台输出 : xiaohua 2、提交的域名称和处理方法的参数名不一致 提交数据 : http://

  • http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/repositories.html Spring Data的MongoTemplate和MongoRepository有什么区别? 我这样做是因为我需要使用MongoTemplate进行特殊查询。 这里也描述了这个问题,但解决方案似

  • 我正在尝试更改现有的spring批处理作业(XML配置),它从oracle数据库读取数据,并以所需格式写入txt和XML文件,但现在我想更改相同的实现,从Cassandra数据库而不是oracle读取数据,但我在spring批处理中找不到类似于JdbcCursorItemReader的项目读取器。 有人能告诉我应该使用哪个ItemReader从Cassandra DB读取数据吗?或者我需要创建一个

  • 本文向大家介绍详解Spring Boot + Mybatis 实现动态数据源,包括了详解Spring Boot + Mybatis 实现动态数据源的使用技巧和注意事项,需要的朋友参考一下 动态数据源 在很多具体应用场景的时候,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库。又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动态数据源方案