如何使用Spring JPA进行分页QueryDSL查询?

eh.*_*eh. 6 spring querydsl spring-data-jpa

QueryDSL定义了一个OrderSpecifier接口,通过调用asc()或者可以很容易地获得任何字段的实例desc().QueryDslPredicateExecutorSpring Data JPA 的界面甚至有一个findAll()OrderSpecifiers为参数的方法.

org.springframework.data.domain.PageRequest但是对QueryDSL一无所知,它有自己定义查询排序顺序的方法,即org.springframework.data.domain.Sort.它可以包含org.springframework.data.domain.Sort.Order许多OrderSpecifiers,它们很像s,除了它们不是类型安全的等等.

所以,如果我想制作使用排序的分页查询,是否真的没有办法使用QueryDSL来定义它?

Mic*_*les 7

我知道它已经有一段时间了,我不确定这在OP时是否可用但是现在引入了一个QPageRequest对象,允许通过QueryDSL进行排序以添加到spring数据jpa查询DSL ...


Tim*_*per 6

如果你找不到另一种方法,它应该像这样工作

private Sort sortBy(Path<?> path) {
    return new Sort(Sort.Direction.ASC, path.getMetadata().getExpression().toString());
}
Run Code Online (Sandbox Code Playgroud)


Ser*_*eyB 6

这是Sort使用QueryDSL 构造对象的一种更简单的方法:

new QSort(user.manager.firstname.asc())
Run Code Online (Sandbox Code Playgroud)

然后你可以PageRequest像这样使用它:

new PageRequest(0, 10, new QSort(user.manager.firstname.asc()))
Run Code Online (Sandbox Code Playgroud)