spring-data-jpa 为什么在保存带有id的实体时,从JPA存储库中检索订单会发生变化?

cvxl0en2  于 2022-11-10  发布在  Spring
关注(0)|答案(2)|浏览(160)

我使用JPA Repository with Hibernate作为Sping Boot 应用程序中的数据源。
我以前的数据:
[{“id”:1,“name”:“非堆栈”},{“id”:2,“name”:“溢出”}]
我对以下数据执行保存操作:
{“标识”:1,“名称”:“堆栈”}
然后当我执行findAll()时,它检索到:
[{“标识”:2,“名称”:“溢出”},{“标识”:1,“名称”:“堆栈”},]
这是它应该如何工作的吗?关于这个问题有什么想法或解决方法吗?

5gfr0r5j

5gfr0r5j1#

findAll()以无序的方式返回数据。它对这些记录进行排序的方式取决于RDBMS,通常是最方便的方式。在这种情况下,依赖于顺序并不是一个好主意。
要保证记录按ID排序,您可以在存储库中创建自己的方法,例如:

// Full query
@Query("SELECT t FROM Type t ORDER BY t.id")
List<T> findAllOrdered();

// Shorthand relying on method naming
List<T> findAllOrderById();

有关方法命名的更多信息可以在SpringDataJPA参考中的4.3.2Querycreation中找到。
或者,您可以使用findAll(org.springframework.data.domain.Sort)方法,例如:

repository.findAll(Sort.by("id"));
oxiaedzo

oxiaedzo2#

findAll()只获取所有的数据,没有指定顺序。如果你想对结果进行排序,你应该使用findAllOrderById()

相关问题