为什么在保存具有ID的实体时,JPA存储库中的订单检索会发生变化?

时间:2015-09-29 07:46:57

标签: spring hibernate jpa spring-boot spring-data-jpa

我使用带有Hibernate的JPA Repository作为spring启动应用程序中的数据源。

之前我的数据:

  

[{“id”:1,“name”:“Not Stack”},{“id”:2,“name”:“Overflow”}]

我使用这些数据进行保存操作:

  

{ “ID”:1, “名称”: “堆栈”}

然后,当我找到所有()时,它检索到了:

  

[{“id”:2,“name”:“Overflow”},{“id”:1,“name”:“Stack”},]

这是怎么回事?关于这个问题的任何想法或解决方法?

2 个答案:

答案 0 :(得分:4)

findAll()只返回一个结果列表,该结果列表以数据库提供的顺序返回结果(ResultSet)。对这些记录进行排序的方式取决于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();

有关方法命名的更多信息,请参阅Spring Data JPA参考中的4.3.2 Query creation

或者您可以使用findAll(org.springframework.data.domain.Sort)方法,例如:

repository.findAll(new Sort("id"));

答案 1 :(得分:2)

findAll()只获取所有数据,没有订单说明。如果您希望订购结果,则应使用findAllOrderById()