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)数据库排序:利用 set,bag 或者 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)内存排序 :利用 set,bag 或者 map 映射中的 sort 属性,sort 属性中允许的值包括 unsorted,natural 和某个实现了 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
}
}