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
分享到:
相关推荐
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. 有序集合...
14.5.1 在数据库中对集合排序 14.5.2 在内存中对集合排序 14.6 映射组件类型集合 14.7 小结 14.8 思考题 第15章 映射实体关联关系 15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 ...
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. 有序集合...
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. 有序集合...
集合排序(Sorted Collections) 6.7. 使用<idbag><br>6.8. 双向关联(Bidirectional Associations) 6.9. 三重关联(Ternary Associations) 6.10. 异类关联(Heterogeneous Associations) 6.11. 集合...
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. 有序集合...
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. 有序集合(Sorted ...
6.3.2 排序集合和有序集合 6.3.3 映射嵌入式对象的集合 6.4 映射父/子关系 6.4.1 多样性 6.4.2 最简单的可能关联 6.4.3 使关联双向 6.4.4 级联对象状态 6.5 小结 第7章 高级实体...
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. 有序集合(Sorted ...
值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted ...
7.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted...
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. 有序集合...
14.5.1 在数据库中对集合排序 14.5.2 在内存中对集合排序 14.6 映射组件类型集合 14.7 小结 14.8 思考题 第15章 映射实体关联关系 15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 ...
14.5.1 在数据库中对集合排序 14.5.2 在内存中对集合排序 14.6 映射组件类型集合 14.7 小结 14.8 思考题 第15章 映射实体关联关系 15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 ...
14.5.1 在数据库中对集合排序 14.5.2 在内存中对集合排序 14.6 映射组件类型集合 14.7 小结 14.8 思考题 第15章 映射实体关联关系 15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 ...
集合排序(Sorted Collections) 6.7. 使用<idbag><br>6.8. 双向关联(Bidirectional Associations) 6.9. 三重关联(Ternary Associations) 6.10. 异类关联(Heterogeneous Associations) 6.11. 集合...
7.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合...
HIBERNATE-映射排序映射 该存储库包含用于映射已排序地图的Hibernate代码示例 我们使用@OrderBy,它指定检索集合时元素的顺序。 为了简化开发和测试,我们将使用自动配置 < property xss=removed>update 数据库表...
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. 有序集合(Sorted ...