hibernate 集合映射之有序集合

hibernate 有时候会出现集合映射的状况,通常One-to-many的时候会用到。主要形式为:java

model:数据库

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

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

}orm

xml: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 属性get

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

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

相关文章
相关标签/搜索