spring - 使用 JPA 存储库上的 Spring-Data 可分页对象进行排序时出现重复的结果
问题描述
我有一个rest-api,它在调用时返回用户列表。API 使用 org.springframework.data.domain.Pageable 对结果进行分页和排序。这通过简单地将可分页传递给 JPA 存储库,然后返回所需的页面来工作。
出于某种原因,当按名字排序时,可能会出现重复条目,但前提是多个条目具有相同的名字。但是,在按姓氏排序时不会发生这种情况。两者都只是实体中的字符串,除了属性名称之外没有明显的区别。
你们有没有遇到过这种情况,如果有,你们是如何解决的?
编辑:澄清一下,控制器和存储库之间基本上没有我的逻辑。我只是通过可分页并返回结果。
编辑2:解决了!有趣的花絮:仅在按名字排序时才出现问题的原因是,无论条目以哪种方式排序,只有始终出现在第 1 页和第 2 页上的记录。幸运的是,我们的测试人员使用了特定的测试数据,否则我可能从未注意到。
解决方案
是的,我已经看到了:一条记录可以出现在例如第 1 页上,然后又出现在第 2 页上。
这是数据库级别的问题。例如,每页 10 个项目和位置 10 和 11 的项目具有相同的属性值,那么它可以随机出现在每个结果集中的哪个位置。
因此,对唯一属性(例如数据库 ID)应用二次排序,以确保跨请求的顺序一致。
推荐阅读
- .net-core-3.0 - Text.Json 自定义 JsonConverter 被忽略
- javascript - 如何让JS信息转到php生成文本文件?
- wordpress - WordPress 数据导出问题
- python - 使用 python-vlc 同时播放多个音频/视频文件
- html - 外部 Css 文件未链接到 HTML 页面 - 刷新不起作用(请参阅编辑以获取解决方案)
- java - 如何减去和计算文件中的时间戳?
- php - 如何在 PHP 中的 Stack Trace 中查找错误?
- c# - 检索包含数据的对象列表以及连接中的行数
- python - 如何从 XML 文件中提取值?
- php - 在 MySQL 中将数组存储在多行中