hibernate 集合映射之有序集合

[亡魂溺海] 提交于 2019-12-05 01:43:32

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
 }
}

 

 

 

    

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!