从Pageable.getSort()转换为List <order>,以在Spring存储库自定义中对Criteria API进行的查询进行排序

时间:2018-03-24 10:13:38

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

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

我需要将pageable.getSort()属性转换为List<Order>才能设置criteriaQuery.orderBy(List<Order>)方法的订单。

为了检索分页结果,我使用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;

有什么建议吗? 谢谢,Andrea

1 个答案:

答案 0 :(得分:0)

可以使用queryUtils完成。

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