2010-06-11 85 views
4

我有創建順序很重要的實體列表,但它們不包含用於排序的時間戳。實體被添加到列表的末尾,因爲它們將在列表中正確排列。休眠:如何維持插入順序

使用Hibernate持久化列表後,實體以創建順序出現在數據庫表中。但是,當使用新的Hibernate會話檢索列表時,列表現在與插入/創建的順序相反。

這是預期的行爲?有沒有辦法以與表中顯示的順序檢索列表?

主鍵是一個UUID,實體列表應始終在相同的IP地址和JVM上創建。這意味着通過UUID排序是一種可能性,但我寧願不做假設。

另一種可能性是,如果列表被保證總是以相反的順序出現,我總是可以反向工作。

回答

3

JPA(其中休眠器具)具有@OrderBy

@OneToMany 
@OrderBy("uuidColumn") 
private List<Something> list; 
+0

我最終這樣做,並依靠Hibernate生成的UUID,只要它們是在同一個IP地址上的同一個JVM上創建的,就可以在創建時進行排序。 – jwaddell 2010-06-18 00:18:41

3

你必須堅持列表爲 list。這樣,您將有一個額外的列來保存元素的順序。

類型,如袋和套將完成工作,但將失去元素的順序。

+0

我已經使用了清單,但聽起來像我需要一個索引字段添加到數據庫,使其正常工作(我m使用註釋來定義實體)。理想情況下,我想避免對數據庫結構進行任何更改,是否有任何方法可以這樣做? – jwaddell 2010-06-11 04:59:26

+0

您是否嘗試過@OrderColumn註釋? http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/ 根據'索引集合'部分?如果這項工作讓我知道,所以我可以更新我的答案:) – mcabral 2010-06-11 05:09:33

+0

耶,我有幸運的。甩它的價值確實會改變後續水合的收集順序。 – 2016-04-12 00:49:13