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)数据库排序:利用 set,bag 或者 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)内存排序 :利用 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 }}