hibernate 集合映射之有序集合

hibernate 有时候会出现集合映射的情况,一般One-to-many的时候会用到。主要形式为:

model:

 public class TestPerson {
       private Long pid;
       private String pname;
       private String age;
       private Set<TestRole> testRole = new HashSet<TestRole>();

        -------get() set()方法------

}

xml:

 <set name="testRole" table="test_role" lazy="true" sort="com.qsfs.util.Compare">
   <key column="TESTPERSOPN" />
   <one-to-many class="com.qsfs.model.TestRole" />// TestRole也是一个类,与testPerson多对一的关系
</set>

如果要查询出的集合排序好的,那么有两种方法:

(1)数据库排序:利用 setbag 或者 map 映射中的 order-by 属性

<set name="testRole" table="test_role" lazy="true" order-by="roleName asc">//roleName为数据库字段
   <key column="TESTPERSOPN" />
   <one-to-many class="com.qsfs.model.TestRole" />
</set>

(2)内存排序 :利用 setbag 或者 map 映射中的 sort 属性,sort 属性中允许的值包括 unsortednatural 和某个实现了 java.util.Comparator 的类的名称
1,sort 属性值为:natural

<set name="testRole" table="test_role" lazy="true" sort="natural">//按照compareTo的方式进行排序,应该为升序

   <key column="TESTPERSOPN" />
   <one-to-many class="com.qsfs.model.TestRole" />
</set>

2,sort 属性值为:某个实现了 java.util.Comparator 的类的名称
  <set name="testRole" table="test_role" lazy="true" sort="com.qsfs.util.Compare">
   <key column="TESTPERSOPN" />
   <one-to-many class="com.qsfs.model.TestRole" />
  </set>

 

package com.qsfs.util;

import java.util.Comparator;
public class Compare implements Comparator{

 public int compare(Object o1, Object o2) { 
  TestRole r1 = (TestRole)o1;
  TestRole r2 = (TestRole)o2;
  if(r1 == r2){
   return 0;
  }
  int result = r1.getRid().compareTo(r2.getRid());
  return result;//降序为-result
 }
}

 

 

 

    

转载于:https://my.oschina.net/u/1169535/blog/510781

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值