Spring Boot Data JPA中findAll()是否保证数据返回顺序及稳定性?
Spring Boot Data JPA findAll() 返回顺序说明
findAll()方法是否保证返回数据的顺序?
不保证。JPA规范本身没有定义findAll()的默认返回顺序,这个方法底层执行的是不带ORDER BY子句的SQL查询。repository.findAll()是否会按特定顺序返回记录?若是,该顺序是什么?
默认情况下不会按特定顺序返回。只有显式指定排序规则时,才会有确定的顺序:- 在实体类上添加
@OrderBy注解,比如@OrderBy("id ASC"),此时findAll()会按注解指定的规则排序返回; - 调用带
Sort参数的重载方法,比如repository.findAll(Sort.by(Sort.Direction.DESC, "updateTime")),返回结果会按指定字段和方向排序。
若没有任何显式排序,返回顺序完全依赖数据库存储引擎的内部实现,不同数据库甚至同一数据库的不同存储引擎表现都可能不一样。
- 在实体类上添加
在数据库保持不变的情况下,是否始终能保证返回顺序一致?
不能绝对保证。哪怕数据库中的数据没有变化,数据库的执行计划调整、存储结构的细微变动(比如InnoDB的页分裂、索引碎片整理)都可能改变无ORDER BY查询的返回顺序。只有通过显式排序(注解或带Sort参数的方法),才能确保每次返回的顺序完全一致。
内容的提问来源于stack exchange,提问作者Karkala Srikanth
相关产品推荐
相关产品推荐

