zoukankan      html  css  js  c++  java
  • 对hibernate的set集合进行排序

    在如下方法中:方法二已经哥已经证实是对的!可以可以规定排序方式:<set name="four" inverse="true" lazy="false" cascade="all"  order-by="id desc ">

    对hibernate的set集合进行排序

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

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

    部门的pojo类:

    public classDept{

    private Integer deptId;

    private String dname;

    private Set  emps = newHashSet(0);

    }

    员工的pojo类:

    public classEmp{

    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>

                    <columnname="deptId"/>

                </key>

                <one-to-manyclass="hwt.pojo.Emp"/>

            </set>

     

     

    方法三:

    也是在配置文件中修改:

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

    public class HwtSorter implements Comparator {

        public int compare(Objecto1, 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>

                    <columnname="deptId"/>

                </key>

                <one-to-manyclass="hwt.pojo.Emp"/>

            </set>

     
  • 相关阅读:
    Android popupwindow 失去焦点或者点击空白区域时消失的解决方法
    九度 题目1394:五连击数组
    地市级地铁数据管理信息系统解决方式
    用位运算实现两个整数的加法运算
    Leaflet--建设移动设备友好的互动地图
    atitit.自适应设计悬浮图片的大小and 位置
    PIM-DM协议内核触发机制及协议执行机制记录
    整合struts2+spring+hibernate
    UITableViewCell的prepareForReuse方法
    《linux 内核全然剖析》编译linux 0.12 内核 Ubuntu 64bits 环境
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3078485.html
Copyright © 2011-2022 走看看