`

hibernate中的set排序

阅读更多

       hibernateset集合进行排序

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

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

    部门的pojo类:

 

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

分享到:
评论

相关推荐

    LIST对象排序通用方法HIBERNATE的SET排序.pdf

    LIST对象排序通用方法HIBERNATE的SET排序.pdf

    分析LIST对象排序通用方法HIBERNATE的SET排序.pdf

    分析LIST对象排序通用方法HIBERNATE的SET排序.pdf

    LIST对象排序通用方法HIBERNATE的SET排序[整理].pdf

    LIST对象排序通用方法HIBERNATE的SET排序[整理].pdf

    解决Hibernate中MySQL的中文排序

    在这个例子中,`@OrderBy`注解使得Hibernate在查询`Article`时,根据`title`字段的GBK中文排序规则进行排序。 另外,提供的`GBKOrder.java`文件可能是实现自定义排序策略的类。在Hibernate中,可以通过实现`...

    hibernate criteria 分组 排序 关联

    在Hibernate中,使用`Criteria`进行查询时,可以通过添加排序条件来对结果集进行排序。`Criteria`提供了一个非常灵活的方式来实现这一点。 **示例代码**: ```java Criteria criteria = session.createCriteria...

    hibernate set 集合映射

    在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象模型中的集合类,如List、Set、Map等。这允许我们在Java代码中操作对象集合,而Hibernate负责处理底层的SQL查询和数据存储。本文将深入探讨`...

    hibernate 中的 set map list 代码

    在Hibernate中,我们通常使用`@ElementCollection`或`@ManyToMany`注解来映射Set。例如,如果一个User类可以有多个Phone对象,我们可以这样定义: ```java @Entity public class User { @Id private Long id; @...

    hibernate 一对多 set 与 list 分别用法

    - **无序性**:`Set`内部的元素排序由`HashSet`或`TreeSet`等实现决定,通常并不按照插入顺序排列,这在数据一致性上更有优势,但可能不符合某些业务需求。 - **性能**:在数据库层面,`Set`映射通常会导致主键...

    hibernate中容器映射技术

    在Java持久化框架Hibernate中,容器映射技术是将Java集合类(如Set、Map、List等)与数据库中的关联关系进行映射的一种方法。这种技术使得对象之间的复杂关系能够被有效地存储和检索,增强了数据操作的灵活性。下面...

    hibernate 3.6 中文 chm

    10. **一对多、多对一、一对一和多对多关系映射**:Hibernate支持多种关联映射,包括集合映射,如List、Set、Map等,以及复合主键的处理。 11. **继承映射**:在Java中,子类可以继承父类。在Hibernate中,这种继承...

    Hibernate+中文文档

    1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - EventManager web应用程序 1.4.1. 编写基本的servlet 1.4.2. 处理与渲染 1.4.3. ...

    hibernate3.3.2中文帮助文档

    9. **集合映射**:Hibernate支持多种类型的集合映射,如List、Set、Map等,以及一对一、一对多、多对多的关联关系映射。 10. **缓存机制**:Hibernate提供了一级缓存和二级缓存,可以提高数据读取速度并减少数据库...

    hibernate中的集合映射范例程序

    在Hibernate中,我们通常使用`&lt;set&gt;`标签,它默认按对象的自然排序或自定义比较器排序。例如,一个部门可以有多个员工,员工ID可以作为唯一标识,因此适合用Set。 3. **Map映射**:Map提供了键值对的存储方式。在...

    Hibernate中文详细学习文档

    1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - EventManager web应用程序 1.4.1. 编写基本的servlet 1.4.2. 处理与渲染 1.4.3. ...

    hibernate3.2中文文档(chm格式)

    1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - EventManager web应用程序 1.4.1. 编写基本的servlet 1.4.2. 处理与渲染 1.4.3. ...

    hibernate 开发文档发布

    在3.1.x版本中,Hibernate对性能进行了多方面的优化,包括延迟加载(Lazy Loading)、批处理(Batch Processing)和结果集映射(Result Set Mapping)等,旨在减少数据库交互次数,提升系统性能。 九、总结 ...

    hibernate 中HQL语句查询学习笔记

    ### Hibernate中HQL语句查询学习笔记 #### HQL基础 **HQL**(Hibernate Query Language)是Hibernate框架推荐使用的查询语言,它提供了一种面向对象的方式来查询数据库,支持多种复杂的查询操作,如继承、多态及...

    hibernate中文帮助文档

    2. 适当使用集合类型:避免使用List,考虑Set以去重,使用Bag时注意排序问题。 3. 分析和设计合适的缓存策略:根据业务需求调整缓存级别和大小。 4. 避免过多的数据库交互:尽量通过批处理和缓存减少数据库操作。 ...

    Hibernate 中文 html 帮助文档

    1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - EventManager web应用程序 1.4.1. 编写基本的servlet 1.4.2. 处理与渲染 1.4.3. ...

Global site tag (gtag.js) - Google Analytics