spring - 使用 JPA 存储库上的 Spring-Data 可分页对象进行排序时出现重复结果

标签 spring spring-data-jpa spring-data

我有一个rest-api,它在调用时返回用户列表。 API 使用 org.springframework.data.domain.Pageable 对结果进行分页和排序。这通过简单地将可分页传递到 JPA 存储库来工作,然后返回所需的页面。

出于某种原因,按名字排序时,可能会出现重复条目​​,但前提是多个条目具有相同的名字。但是,当按姓氏排序时,这永远不会发生。两者都只是实体中的字符串,除了属性名称之外没有可辨别的区别。

你们有没有遇到过这种情况,如果有,你们是如何解决的?

编辑:澄清一下, Controller 和存储库之间基本上没有我的逻辑。我只是通过可分页并返回结果。

编辑2:解决了!有趣的花絮:仅在按名字排序时才会出现问题的原因是,只有在第 1 页和第 2 页上总是出现记录,无论条目以何种方式排序。幸运的是,我们的测试人员使用了特定的测试数据,否则我可能从未注意到。

最佳答案

是的,我已经看到:记录可以出现在,比如说,第 1 页,然后再次出现在第 2 页。

这是数据库级别的问题。例如,每页 10 个项目和位置 10 和 11 的项目具有相同的属性值,然后可以随机出现在每个结果集中的哪个位置。

因此,对唯一属性(例如数据库 ID)应用辅助排序,以确保跨请求的顺序一致。

关于spring - 使用 JPA 存储库上的 Spring-Data 可分页对象进行排序时出现重复结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53433735/

相关文章:

java - 在java中转换非结构化对象

java - Spring Boot REST @RequestParam 未被验证

spring - 如何使用 Spring 捕获 Thymeleaf( View )渲染异常?

java - Spring Data JPA 查询无法在 MsSQL Server 上运行

hibernate - spring jpa嵌套投影生成不正确的查询

spring-boot - 实体类名转换为带下划线的SQL表名

java - 将自定义命名/ native 查询映射到实体

java - 使用 Spring NamedParameterJdbcTemplate,如何更新数据库中每个客户的列?

java - MongoOperations - upsert/findAndModify 删除 mongo 中的所有字段

java - Spring Data MongoDB NotLike - 不支持的关键字