【发布时间】:2018-09-02 22:45:19
【问题描述】:
我已经实现了一个自定义 Spring 存储库,它在输入中接收 org.springframework.data.domain.Pageable 对象。此Pageable 对象具有以下排序属性(例如):id: DESC,name: ASC。
我需要将pageable.getSort() 属性转换为List<Order> 以便为criteriaQuery.orderBy(List<Order>) 方法设置顺序。
为了检索分页结果,我使用new PageImpl 将pageable 对象传递给它,但这不能管理排序。
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<T>, org.springframework.data.domain.Pageable),但是不满足你的要求吗? -
使用 Spring 的类 QueryUtils 及其方法 toOrders() 解决:
criteriaQuery.orderBy(QueryUtils.toOrders(pageable.getSort(), root, criteriaBuilder)); -
@AndreaBevilacqua 您可以在上面的评论中回答您自己的问题。会很好,而且更容易找到答案。
标签: java jpa spring-data-jpa criteria-api