JPA使用哪个实现类集

时间:2012-04-27 06:03:00

标签: java hibernate jpa collections

我正在使用休眠。

我有一对多的关系。

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

我的问题是我在内部使用的集合的实现在哪里?如果我扩展了类似的接口,返回的对象会被排序吗? 或者我必须自己排序?

2 个答案:

答案 0 :(得分: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属性的允许值是unsorted,natural和   实现java.util.Comparator的类的名称。

     

排序集合实际上表现得像java.util.TreeSet或   java.util.TreeMap

Docs编辑注释,检查

  

3.4.6。集合相关注释

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

答案 1 :(得分:1)

您将使用Hibernate自己的Set - org.hibernate.collection.PersistentSet http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/collection/PersistentSet.html 这个类没有实现Comparable inteface,所以你应该自己对它进行排序或者将它转换为set的某种可排序实现(例如TreeSet)。