2010-04-15 83 views
28

我對JPA有以下問題:保存JPA列表中的訂單

我可以保存java.util.List中元素的順序嗎?在我的應用程序中,我將元素放在列表中的順序很重要,但在從數據庫中獲取這些集合後,順序與預期不同。你能告訴我一種解決這個問題的方法嗎?

P.S.在我可以訂購的收藏品中,實體中沒有字段。

羅森

回答

33

有在JPA 1這樣的一些哈克方式,但最簡單的方法來切換到JPA 2提供商。 @OrderColumn註釋支持就是你要找的。 Eclipselink have an ok tutorial on how to use it

+0

這是註釋只能在現有的EclipseLink? 無論如何,據我所見,它不會解決我的問題。在鏈接的例子中,您保存了表中添加實體的順序,而不是集合中它們滿足的順序。就像它們是由「電話」實體的ID-s命令一樣。這不是我的情況。 P.S.一個實體可能是不同計數的集合的一部分。 – 2010-04-15 09:10:40

+1

這不僅僅是Eclipselink的一部分,不,它是JPA 2規範的一部分。我還沒有使用它,但它應該保留集合的順序。另一個鏈接:http://blogs.sun.com/ldemichiel/entry/java_persistence_2_0_public – GaryF 2010-04-15 13:35:27

+0

指向blogs.sun.com的鏈接返回404。 – 2012-03-20 11:40:23

2

JPA有2種類型的列表。在JPA1中有一個「有序列表」(這是你看到的,由一些SQL子句定義的排序)。在JPA2中,您可以擁有「有序列表」或者「索引列表」(保存創建順序)......所提及的@OrderColumn。任何JPA2的實現都必須支持這個例如DataNucleus。從第一天起

2

可以保存在一個java.util.List的元素的順序

JDO已經有了索引列表。在JPA 2.0中,通過使用@OrderColumn註釋來保存元素的順序是一種好方法。

詳細情況,您可以參考以下鏈接 Order Column (JPA 2.0)

+0

感謝您發佈相關文檔的鏈接。 – Spider 2015-09-10 19:32:15