具有分页和排序的Spring Data @Query未排序

时间:2018-09-02 22:49:31

标签: hibernate spring-boot jpa spring-data-jpa spring-data

我试图指定一个带有@Query注释的存储库方法和一个内部带有Sort对象的Pageable:

编辑1:。此存储库正在扩展PagingAndSortingRepository

@Query("...")
Page<Entity> findBySomething(..., Pageable pageable);

使用以下方法签名指定pageable对象:

public PageRequest(int page, int size, Direction direction, String... properties)

但是生成的输出查询没有排序选项,例如:

select a, b, c from table_x where ... limit 10

...当我期望的是:

select a, b, c from table_x where ... order by a asc limit 10

这里有人遇到过这样的问题吗? 我正在使用Spring-Boot 1.5.x。

2 个答案:

答案 0 :(得分:0)

您可以像我一样这样做。

尝试一下,可能对您没有帮助。

1)在控制器中

@RequestMapping("/findUserByNameAndSortItDescNo/{name}")
        public @ResponseBody Page<User> findBookByNameAndSortItAscByName(@PathVariable String name)
        {
            // Page = 'A page is a sublist of a list of objects. It allows gain information about the position of it in the containing entire list.'
            Page<User> user = userRepository.findByName(name,new PageRequest(0,100,new Sort(Direction.DESC,"no")));
            return user;
        }

2)在存储库中。

Page<User> findByName(String name,Pageable pageable);

答案 1 :(得分:0)

您的请求是什么样的?

不幸的是,当您搜索“ spring boot sort pageable”时,Google上的索引索引页很高:
https://docs.spring.io/spring-data/rest/docs/2.0.0.M1/reference/html/paging-chapter.html

以上不再是进行排序的正确方法。相反,您应该遵循此https://docs.spring.io/spring-data/rest/docs/current/reference/html/

排序的旧方法是添加一个附加参数,该参数的后缀为'.dir',后缀为asc或desc。

新方法是&sort =,其中方向由属性名称的附加逗号提供。

您还可以查看返回结果的“排序”值,以查看在检查后端查询生成之前是否曾尝试进行排序。即

  

{“ content”:[],“ last”:true,“ totalElements”:0:“ totalPages”:0,“ sort”:[{“ direction”:“ DESC”,“ property”:“ createdDate” ,“ ignoreCase”:false,“ nullHandling”:“ NATIVE”,“ ascending”:false,“ descending”:true}],“ size”:1000,“ number”:0,“ first”:true,“ numberOfElements” :0})

我希望这会有所帮助。