我有一个rest-api,它在被调用时会返回用户列表。该API使用org.springframework.data.domain.Pageable对结果进行分页和排序。只需将可传页的页面传递到JPA存储库,然后返回所需的页面即可。
由于某种原因,当按名字排序时,有可能出现重复的条目,但前提是多个条目具有相同的名字。但是,按lastName排序永远不会发生。两者都是实体中的简单字符串,除了属性名称之外,没有其他区别。
您有没有遇到过这种情况,如果遇到这种情况,您如何解决?
编辑:为明确起见,在控制器和存储库之间基本上没有我的逻辑。我只是通过分页器并返回结果。
编辑2:解决!有趣的标题:仅在按名字排序时才出现此问题的原因是,始终只有记录出现在第1页和第2页上,而不管条目的排序方式如何。幸运的是,我们的测试人员使用了特定的测试数据,否则我可能从未注意到。
答案 0 :(得分:3)
是的,我已经看到:一条记录可以出现在第1页上,然后再出现在第2页上。
这是数据库级别的问题。例如,每页10个项目以及位置10和11处的项目具有相同的属性值,那么可以随机选择哪个结果出现在每个结果集中的哪个位置。
因此,对唯一属性(例如数据库ID)应用辅助排序,以确保跨请求进行一致的排序。