`
zhangfeilo
  • 浏览: 401189 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

Hibernate对集合排序

阅读更多

Hibernate对集合中的元素支持两种排序方式:

Ø 在数据库中排序:简称为数据库排序,当Hibernate通过select语句到数据库中检索集合对象时,利用order by子句进行排序。

Ø 在内存中排序:简称为内存排序,当Hibernate把数据库中的集合数据加载到内存中的Java集合中后,利用Java集合的排序功能进行排序,可以选择自然排序或者客户化排序两种方式。

在映射文件中,Hibernate用sort属性来设置内存排序,用order-by属性来设置数据库排序,表14-2显示了<set>、<idbag>、<list>和<map>元素的排序属性。

表14-2 <set>、<idbag>、<list>和<map>元素的排序属性

排 序 属 性

<set>

<idbag>

<list>

<map>

sort属性(内存排序)

支持

不支持

不支持

支持

order-by属性(数据库排序)

支持

支持

不支持

支持

从表14-2看出,<set>和<map>元素支持内存排序和数据库排序,<list>元素不支持任何排序方式,而<idbag>仅支持数据库排序。

14.5.1 在数据库中对集合排序

<set>、<idbag>和<map>元素都具有order-by属性,如果设置了该属性,当Hibernate通过select语句到数据库中检索集合对象时,利用order by子句进行排序。

下面对本章14.1节的Customer.hbm.xml文件中的<set>元素增加一个order-by属性:

<set   name="images"   table="IMAGES"    lazy="true" order-by="FILENAME asc">

        <key column="CUSTOMER_ID" />

        <element column="FILENAME" type="string" not-null="true"/>

</set>  

以上代码表明对images集合中的元素进行升序排列,当Hibernate加载Customer对象的images集合时,执行的select语句为:

select CUSTOMER_ID,FILENAME from IMAGES

where CUSTOMER_ID=1 order by FILENAME;

在DOS命令行下进入chapter14根目录,然后输入命令:

ant -file build1.xml run

就会运行BusinessService类。BusinessService的main()方法调用test()方法,它的输出结果如下:

org.hibernate.collection.PersistentSet

Tom image1.jpg

Tom image2.jpg

Tom image4.jpg

Tom image5.jpg

在order-by属性中还可以加入SQL函数,例如:

<set   name="images"   table="IMAGES"    lazy="true"

order-by="lower(FILENAME) desc">

 

<key column="CUSTOMER_ID" />

         <element column="FILENAME" type="string" not-null="true"/>

</set>  

当Hibernate加载Customer对象的images集合时,执行的select语句为:

select CUSTOMER_ID,FILENAME from IMAGES

where CUSTOMER_ID=1 order by lower(FILENAME) desc;

在<map>元素中也可以加入order-by属性,以下代码表明对Map类型的images集合中的键对象进行排序:

<map   name="images"   table="IMAGES"   lazy="true" order-by="IMAGE_NAME">

        <key column="CUSTOMER_ID" />

        <map-key column="IMAGE_NAME" type="string"/>

        <element column="FILENAME" type="string" not-null="true"/>

</map>  

以下代码表明对Map类型的images集合中的值对象进行排序:

<map   name="images"   table="IMAGES"   lazy="true" order-by="FILENAME">

        <key column="CUSTOMER_ID" />

        <map-key column="IMAGE_NAME" type="string"/>

        <element column="FILENAME" type="string" not-null="true"/>

</map>  

在<idbag>元素中也可以加入order-by属性,以下代码表明按照IMAGES表中的ID代理主键排序:

<idbag   name="images"   table="IMAGES"    lazy="true" order-by="ID">

        <collection-id type="long" column="ID">

           <generator class="increment"/>

        </collection-id>

        <key column="CUSTOMER_ID" />

        <element column="FILENAME" type="string" not-null="true"/>

</idbag>  

http://book.csdn.net/bookfiles/1264/100126437749.shtml

 

分享到:
评论

相关推荐

    hibernate set 集合映射

    ### Hibernate集合映射基础 1. **集合类型**:Hibernate支持多种集合类型映射,如Set、List、ArrayList、LinkedList、Map等。Set是最常见的集合映射类型,它不允许重复元素,与数据库中的唯一约束相对应。 2. **...

    hibernate bag 集合映射

    在Hibernate中,集合映射是指将数据库中的表与Java集合对象(如List、Set等)进行关联,方便对一组相关数据进行操作。 "bag"是Hibernate中的一种集合类型,表示无序的、可重复的对象集合。在数据库层面,这通常对应...

    hibernate list集合映射

    **标题:“Hibernate List集合映射”** 在Java的持久化框架Hibernate中,集合映射是将数据库中的表与Java对象的集合属性关联的过程。List集合映射是其中常见的一种方式,它允许我们将数据库中的一组相关记录映射到...

    Hibernate集合映射

    综上所述,Hibernate集合映射是将Java集合类与数据库表关联的关键机制,涵盖了从一对一、一对多到多对多的各种关系映射。理解并熟练掌握这些映射方式,能够帮助开发者更好地设计和实现数据持久化层,提高代码的可...

    [原]Hibernate集合映射

    9. **集合排序与分页** Hibernate允许我们在集合映射中定义排序规则,使用`@OrderBy`注解指定排序字段和顺序。同时,通过Query对象的`setFirstResult`和`setMaxResults`方法可以实现分页查询。 10. **集合缓存** ...

    Hibernate一对多多对多查询的排序.doc

    【标题】和【描述】提及的是使用Hibernate框架处理一对多多对多关系时的查询与排序问题,特别是关于在HQL(Hibernate Query Language)中进行排序的实现方式。 在Java的Hibernate框架中,处理一对多多对多关系时,...

    JAVA培训-HIBERNATE的集合映射.doc

    在给定的文档“JAVA培训-HIBERNATE的集合映射.doc”中,主要讲解了Hibernate如何处理不同类型的集合映射,包括Set、List、Array、Map和Bag。我们将详细讨论这些集合映射以及它们在实际应用中的使用。 首先,我们来...

    hibernate查询集合.pdf

    需要注意的是,HQL对大小写不敏感,但类名和属性名必须与实际定义一致,因此`from student`会导致错误。 当使用`from`子句结合多个类,如`from Student, Course`,HQL会返回这些类实例的笛卡尔积,即所有可能的组合...

    hibernate 3.6 中文 chm

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

    hibernate中的集合映射范例程序

    首先,集合映射是Hibernate中处理一对多、多对多关系的核心机制。它允许我们将一个实体对象与多个相关对象关联起来,这些相关对象可以存储在一个集合中。在Java中,常见的集合类型有List、Set、Map等,它们在...

    北大青鸟Hibernate学习资料

    本学习资料集合了多个关于Hibernate的重要主题,包括对象关系映射的基础、持久化机制、查询语言以及不同类型的关联关系,旨在帮助学习者深入理解并掌握Hibernate的核心概念和技术。 1. **对象状态及一对多关联** ...

    Hibernate(一对多表操作)

    例如,使用二级缓存可以减少数据库访问,而`@OrderBy`或`@Sort`可以控制集合的排序方式,避免不必要的全表扫描。 ### 7. 注意事项 在实际应用中,应谨慎处理一对多关系的空值和重复值问题,避免数据冗余和不一致性...

    hibernate视频

    - **一对多映射**:通过外键或集合方式实现。 - **多对多映射**:通过中间表实现。 - **单表继承**:所有子类共享一张表。 - **多表继承**:每个子类对应一张表。 - **表每类继承**:每个类对应一张表。 ### 四、...

    hibernate源码分析过程

    排序策略可以控制集合元素的顺序。 聚合映射 Hibernate 的聚合映射可以将多个对象聚合到一个对象中。聚合映射可以是单向映射或双向映射。单向映射可以通过外键或关系表来实现。双向映射可以通过多对一、一对一、一...

    hibernate教程+3.0API

    10. **集合映射**:Hibernate支持多种集合类型的映射,如List、Set、Map等,方便处理一对多、多对一、多对多的关系。 通过学习《Hibernate教程+3.0 API》,开发者可以全面掌握Hibernate的核心概念和实际应用,从而...

    hibernate in action 中文版书籍

    9. **高级特性**:涵盖动态模型、多态性、集合元素类型、子查询、联合实体、继承策略等进阶主题,提升开发者对Hibernate的深入理解和运用能力。 10. **最佳实践与实战经验**:分享作者在实际项目中积累的Hibernate...

    hibernate 集合映射

    Set集合不允许有重复元素,因此在Hibernate中,set映射通常用于表示唯一性关系,如一对多关系。在Hibernate映射文件中,我们可以使用`&lt;set&gt;`标签来配置。例如: ```xml ``` 这里,`name`属性定义了集合...

    hibernate api

    9. **Association Mapping**: Hibernate支持多种关联映射,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)。 10. **Cascade Operations**: 可以设置级联操作,例如在...

    Hibernate+中文文档

    6.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合...

    孙卫琴精通hibernate part2

    - Hibernate支持多种关系映射,本章将深入讲解一对一、一对多和多对一的关系配置,包括集合类型的选择(List, Set, Map等)和级联操作的设置。 4. **Chapter 9:多对多关系映射** - 多对多关系在数据库设计中常见...

Global site tag (gtag.js) - Google Analytics