【问题标题】:Transform from Pageable.getSort() to List<Order> to sort a query made by Criteria API in a Spring repository custom从 Pageable.getSort() 转换为 List<Order> 以在 Spring 存储库自定义中对 Criteria API 进行的查询进行排序
【发布时间】:2018-09-02 22:45:19
【问题描述】:

我已经实现了一个自定义 Spring 存储库,它在输入中接收 org.springframework.data.domain.Pageable 对象。此Pageable 对象具有以下排序属性(例如):id: DESC,name: ASC

我需要将pageable.getSort() 属性转换为List&lt;Order&gt; 以便为criteriaQuery.orderBy(List&lt;Order&gt;) 方法设置顺序。

为了检索分页结果,我使用new PageImplpageable 对象传递给它,但这不能管理排序。

TypedQuery<Entity> typedQuery = entityManager.createQuery(criteriaQuery);
typedQuery.setFirstResult(pageable.getOffset());
typedQuery.setMaxResults(pageable.getPageSize());
Page<Entity> page = new PageImpl<Entity>(typedQuery.getResultList(), pageable, typedQuery.getMaxResults());
return page;

有什么建议吗? 谢谢,安德里亚

【问题讨论】:

  • 你可以使用org.springframework.data.jpa.repository.support.SimpleJpaRepository#getQuery(org.springframework.data.jpa.domain.Specification&lt;T&gt;, org.springframework.data.domain.Pageable),但是不满足你的要求吗?
  • 使用 Spring 的类 QueryUtils 及其方法 toOrders() 解决:criteriaQuery.orderBy(QueryUtils.toOrders(pageable.getSort(), root, criteriaBuilder));
  • @AndreaBevilacqua 您可以在上面的评论中回答您自己的问题。会很好,而且更容易找到答案。

标签: java jpa spring-data-jpa criteria-api


【解决方案1】:

可以使用queryUtils来完成。

 import org.springframework.data.jpa.repository.query.QueryUtils;
    criteriaQuery.orderBy(QueryUtils.toOrders(pageable.getSort(), rootEntity, criteriaBuilder));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 2020-10-01
    • 2019-10-15
    • 2015-07-19
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 2019-11-18
    相关资源
    最近更新 更多