Hibernate 集合排序

今天在CRM中Customer遇到的Set<Contact>属性排序问题,后来翻了下孙卫琴的《精通Hibernate》 Hibernate中的集合 Hibernate中的集合分为四类: 1.bag类:元素无序,可重复 ------------     仅支持数据库排序 2.set类:元素无序,不可重复 -------------    内存排序和数据库排序 3.list类:元素有序,可重复  -------------    不支持任何排序方式 4.array类:数组  5.map类:映射关系                                     内存排序和数据库排序 除bag类集合外,其它集合都可以在java api中找到对应的接口类, bag可以认为对应java中的List  Hibernate中将集合分为2类: 一是值集合,集合中存储的都是基本数据类型,包括String类型,及其它可识别的数据库类型 二是实体集合,集合中存储已经映射了的实体对象,反应对象间的关系。 Hibernate对集合中元素支持两种排序方式: 1.内存排序,通过提供一个实现了Comparator接口的排序器来实现
[java]  view plain copy
  1. 配置文件:  
  2.   
  3. <set name="children" sort="com.company.project.domain.system.MenuComparator">  
  4.   
  5.     <key>  
  6.   
  7.         <column name="parent_id" not-null="true" />  
  8.   
  9.     </key>  
  10.   
  11.     <one-to-many  
  12.   
  13.         class="com.company.project.domain.system.Menu" />  
  14.   
  15. </set>  
  16.   
  17. java文件:  
  18.   
  19. /** 
  20.  
  21.  * 用来给菜单排序 
  22.  
  23.  * 
  24.  
  25.  * @author wangjian 
  26.  
  27.  * 
  28.  
  29.  */  
  30.   
  31. public class MenuComparator implements Comparator<Menu> {  
  32.   
  33.     public int compare(Menu m1, Menu m2) {  
  34.   
  35.         return m2.getDisplayPosition() - m1.getDisplayPosition();  
  36.   
  37.     }  
  38.   
  39. }  
2.数据库排序,就是执行sql语句的时候利用order by {数据库字段1 数据库字段2...} {asc, desc}来达到目的
[java]  view plain copy
  1. 配置文件:  
  2.   
  3. <set name="children" order-by="DISPLAY_POSITION desc">  
  4.   
  5.     <key>  
  6.   
  7.         <column name="parent_id" not-null="true" />  
  8.   
  9.     </key>  
  10.   
  11.     <one-to-many  
  12.   
  13.         class="com.company.project.domain.system.Menu" />  
  14.   
  15. </set>  
  16.   
  17. 注意:order-by属性完全是sql的语法,比如:字段名士数据库字段名称,不是hql中映射的名称,而且可以提供多个排序字段,默认排序方式是asc(升序)  
  18. 关于集合排序的详细信息,可以参考hibernate官方文档的集合相关章节  
  19. 附Hibernate 3 annotations 中配置:  
  20. <pre name="code" class="java">   /* 该客户的所有联系人  
  21.  
  22.       * OrderBy(value = "birthday DESC")为Hibernate数据库中排序 
  23.  
  24.       * */  
  25.   
  26.     @OneToMany(mappedBy="customer",fetch = FetchType.LAZY,cascade=CascadeType.REMOVE)  
  27.   
  28.     @OrderBy(value = "birthday DESC")  
  29.   
  30.     public Set<Contact> getContacts() {  
  31.   
  32.         return contacts;  
  33.   
  34.     }</pre>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值