2012-04-27 58 views
1

我正在使用hibernate。JPA使用哪種實現類的集合

我有一對多的關係。

@OneToMany(mappedBy = "enrollmentSetupCategory", fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    private Set<EnrollmentSetupCategoryLevel> enrollmentSetupCategoryLevels; 

我的問題是我在這裏使用的set的哪個實現?如果我擴展可比接口,返回的對象是否會被排序? 或者我必須排序嗎?

回答

1

您將使用Hibernate自己的Set imlementation - org.hibernate.collection.PersistentSethttp://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/collection/PersistentSet.html 這個類沒有實現Comparable inteface,所以你應該自己進行排序或將其轉換爲一些排序執行設置(例如TreeSet)。

+0

,我正在尋找。謝謝 – 2012-04-27 06:42:07

+0

將PersistentSet強制轉換爲TreeSet將引發ClassCastException – 2017-03-16 23:12:00

4

Hibernate支持排序後的集合映射,您可以指定比較器爲您進行排序。

docs

Hibernate支持實現java.util.SortedMap中和 java.util.SortedSet中的集合。你必須在映射文件 指定一個比較:

<set name="aliases" 
      table="person_aliases" 
      sort="natural"> 
    <key column="person"/> 
    <element column="name" type="string"/> 
</set> 

<map name="holidays" sort="my.custom.HolidayComparator"> 
    <key column="year_id"/> 
    <map-key column="hol_name" type="string"/> 
    <element column="hol_date" type="date"/> 
</map> 

sort屬性中允許的值是無序,自然,實現了java.util.Comparator的類的 名稱。

分揀集合的行爲實際上類似於java.util.TreeSetjava.util.TreeMap

編輯註釋從Docs,檢查

3.4.6。收集的有關注釋

@Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class) 
+0

感謝您的回覆。這就像我告訴休眠看看你必須用於排序的比較器。有一個疑問,如果我讓我的類可比,內部理解好嗎?我是可比較的類,我必須按指定的順序進行排序? – 2012-04-27 06:23:07

+0

如果你看看hibernate文檔,Comparable不是一個選項,http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/SortType.html – mprabhat 2012-04-27 06:27:07