hibernate中的set排序_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > hibernate中的set排序

hibernate中的set排序

 2014/4/22 12:35:40  王亚龙  程序员俱乐部  我要评论(0)
  • 摘要:对hibernate的set集合进行排序在hibernate中,对于一对多和多对多的关联会使用Set集合来操作,但是有时候在业务中需要对set集合中的对象进行排序,当然,我们可以将Set集合改成list集合来存放对象,但是用list的话又要在数据库中新增一个字段,我不想改变数据的结构,那么,我们应该怎么样对Set排序呢?部门表(dept)-------------员工表(emp)部门的pojo类:publicclassDept{privateIntegerdeptId
  • 标签:hibernate

? ? ? ?hibernateset集合进行排序

? ? ? ? 在hibernate中,对于一对多和多对多的关联会使用Set集合来操作,但是有时候在业务中需要对set集合中的对象进行排序,当然,我们可以将Set集合改成list集合来存放对象,但是用list的话又要在数据库中新增一个字段,我不想改变数据的结构,那么,我们应该怎么样对Set排序呢?

? ? ? ? 部门表(dept)-------------员工表(emp)

? ? 部门的pojo类:

?

class="java" name="code">public class Dept{
    private Integer deptId;
    private String dname;
    private Set emps = new HashSaet(0);
}

? ? 员工的pojo类:

?

?

public class Emp{
     private Integer empId;
     private String ename;
     private Dept dept;
} 

?

方法一:

? ? ? 在pojo中不用hashSet , 改用treeSet;

? ? ? private Set emps = new TreeSet(); ?

? ? ? 很简单吧,没错,但是是为什么呢?看一下的HashTable和TreeSet的区别就知道了 ?

HashSet实现Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。HashSet为基本操作提供了稳定性能,这些基本操作包括 add、remove、contains 和 size,假定哈希函数将这些元素正确地分布在桶中。对此集合进行迭代所需的时间与 HashSet 实例的大小(元素的数量)和底层 HashMap 实例(桶的数量)的“容量”的和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)

。HashSet的实现是不同步的。如果多个线程同时访问一个集合,而其中至少一个线程修改了该集合,那么它必须 保持外部同步。

TreeSet类实现 Set 接口,该接口由 TreeMap 实例支持。此类保证排序后的 set 按照升序排列元素,根据使用的构造方法不同,可能会按照元素的自然顺序 进行排序,或按照在创建 set 时所提供的比较器进行排序。是一个有序集合,元素中安升序排序,缺省是按照自然顺序进行排序,意味着TreeSet中元素要实现Comparable接口;我们可以构造TreeSet对象时,传递实现了Comparator接口的比较器对象?

?

方法二:

? ? ? 在dept的配置文件中:Dept.hbm.xml中的<set ></set> 元素上增加order-by="empId"

<set name = "emps" inverse="true" order-by="empId">
    <key>
        <column name="deptId"/>
    </key>
    <one-to-many class="hwt.pojo.Emp"/>
</set>

?

方法三:

? ? ? 也是在配置文件中修改:

? ? ? 先自己写一个类,实现Comparator接口,实现里面的compare方法

public class HwtSorter implements Comparator{
    public int compare(Object o1, Object o2){
        Emp emp1 = (Emp) o1;
        Emp emp2 = (Emp) o2;
        //按照id排序
        Integer empId = emp1.getEmpId();
        Integer empId2 = emp2.getEmpId();
        return empId > empId2 ? 1 : (empId == empId2 ? 0 : -1);
    }
}

?

? ? ? 同样,在dept的配置文件中:Dept.hbm.xml中的<set ></set> 元素上增加

<set name = "emps" inverse="true" sort="hwt.pojo.HwtSort">
    <key>
        <column name="deptId"/>
    </key>
    <one-to-many class="hwt.pojo.Emp"/>
</set>

?

本文摘自:http://wenku.baidu.com/link?url=AvdcBWRkvhCJr1FjhM8vT0Icxe1PReesqp_p1iP0oUZo04sMKqH1sosxRsWYPikqUHfXR0PCtBzGTbqctADRmqc38rWNr-8NENBgJTaa3Sq

发表评论
用户名: 匿名