2015-09-29 13 views
0

我在Spring引導應用程序中將Hibernate的JPA Repository用作數據源。爲什麼從IDA存儲庫中檢索訂單時,如果使用ID保存實體,會發生變化?

我的數據之前:

[{ 「ID」:1, 「名稱」: 「不能疊加」},{ 「ID」:2 「名稱爲」: 「溢出」}]

我做了保存操作與此數據:

{ 「ID」:1, 「名」: 「堆棧」}

後來,當我做findAl升()它檢索到:

[{ 「ID」:2 「名稱爲」: 「溢出」},{ 「ID」:1, 「名稱」: 「堆棧」},]

這是它應該如何工作?有關此問題的任何想法或解決方法?

回答

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(); 

有關方法命名的更多信息,4.3.2 Query creation在Spring數據JPA參考文獻中找到。

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

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

嘿,謝謝!我只是注意到,我的數據庫中的數據順序被改變,就好像它在刪除舊的實例後創建了一個新的實例。當我進行更新時,有沒有辦法在數據庫中維護訂單?因爲據我所知,JPA中只有一種方法,對吧? –

+0

數據順序是什麼意思?您執行了哪些查詢來驗證數據庫中的數據順序?除此之外,您的解決方案是使用ORDER BY查詢對數據進行排序,而不是按照特定順序保存它們,因爲就像我所說的那樣,默認排序取決於數據庫。您通過使用'ORDER BY'來檢索結果的順序由您決定。 – g00glen00b

+0

哦對,這是我的錯誤。我做了一個簡單的查詢從表中選擇。但我只是嘗試手動更新,並導致相同的行爲。 –

2

findAll()只是獲取所有數據,沒有指定的順序。如果您想要訂購結果,您應該使用findAllOrderById()

相關問題