【发布时间】:2020-12-06 08:11:42
【问题描述】:
我最近从以下位置升级了一项服务:
- JDK8 -> JDK11
- Spring Boot 1.5 -> Spring Boot 2.3
从那时起,集成测试以一种奇怪的方式失败,例如在执行查询时(可分页)。从 100 个结果(即 5 页)中,第 5 页始终是随机选择。
结果如下所示:
第 0 页(ids [0, 19])
[SomeObject@... 'inttest_log_device_0', ...]
[SomeObject@... 'inttest_log_device_1', ...]
[SomeObject@... 'inttest_log_device_2', ...]
[SomeObject@... 'inttest_log_device_3', ...]
[SomeObject@... 'inttest_log_device_4', ...]
[SomeObject@... 'inttest_log_device_5', ...]
[SomeObject@... 'inttest_log_device_6', ...]
[SomeObject@... 'inttest_log_device_7', ...]
[SomeObject@... 'inttest_log_device_8', ...]
[SomeObject@... 'inttest_log_device_9',...]
[SomeObject@... 'inttest_log_device_10', ...]
[SomeObject@... 'inttest_log_device_11', ...]
[SomeObject@... 'inttest_log_device_12', ...]
[SomeObject@... 'inttest_log_device_13', ...]
[SomeObject@... 'inttest_log_device_14', ...]
[SomeObject@... 'inttest_log_device_15', ...]
[SomeObject@... 'inttest_log_device_16', ...]
[SomeObject@... 'inttest_log_device_17', ...]
[SomeObject@... 'inttest_log_device_18', ...]
[SomeObject@... 'inttest_log_device_19', ...]
第 1-3 页继续如上。
但是最后一页 (#4) 不同(预期的 ids [80, 99]):
[SomeObject@... 'inttest_log_device_25', ...]
[SomeObject@... 'inttest_log_device_94', ...]
[SomeObject@... 'inttest_log_device_0', ...]
[SomeObject@... 'inttest_log_device_31', ...]
[SomeObject@... 'inttest_log_device_62', ...]
[SomeObject@... 'inttest_log_device_13', ...]
[SomeObject@... 'inttest_log_device_69', ...]
[SomeObject@... 'inttest_log_device_33', ...]
[SomeObject@... 'inttest_log_device_64', ...]
[SomeObject@... 'inttest_log_device_52', ...]
[SomeObject@... 'inttest_log_device_86', ...]
[SomeObject@... 'inttest_log_device_24', ...]
[SomeObject@... 'inttest_log_device_16', ...]
[SomeObject@... 'inttest_log_device_22', ...]
[SomeObject@... 'inttest_log_device_89', ...]
[SomeObject@... 'inttest_log_device_50', ...]
[SomeObject@... 'inttest_log_device_57', ...]
[SomeObject@... 'inttest_log_device_92', ...]
[SomeObject@... 'inttest_log_device_29', ...]
[SomeObject@... 'inttest_log_device_15', ...]
执行的代码是:
someRepository.findAll(predicate, pageable);
存储库只是简单地扩展了 Spring 的 JpaRepository 和 QuerydslPredicateExecutor。 predicate 是带有一些过滤条件的 BooleanBuilder。
此外,代码始终运行良好。升级后它就开始出现问题。
【问题讨论】:
-
您的查询中确实有明确的排序依据(排序顺序)?否则它使用数据库返回的任何内容。
-
@M.Deinum 排序做到了!谢谢一堆。如果你愿意,你可以写一个实际的答案,我会接受的。
标签: java spring-boot hibernate spring-data-jpa