在查询对象的Set或Map成员时,您可以对其进行排序,排序可以在两个层次进行,一个是在Java执行环境中进行,一个是利用数据库本身的排序功能。
Java执行环境中进行排序:
---------------------------------
如果要在Java执行环境中进行排序,可以映像文件中设定sort属性,例如若为Set,则如下设定:
<set name="addrs" table="ADDRS" sort="natural">
<key column="USER_ID"/>
<element type="string" column="ADDRESS" not-null="true"/>
</set>
藉由指定sort为natural,Hibernate在加载数据库的数据时,将使用java.util.SortedSet型态对象,如果是String,则根据compareTo()方法来进行排序,上面的设定将会根据FILENAME进行排序。
如果是Map的话,则如下设定:
<map name="files" table="FILES" sort="natural">
<key column="USER_ID"/>
<index column="DESCRIPTION" type="string"/>
<element type="string" column="FILENAME" not-null="true"/>
</map>
上面的设定将使用java.util.SortedTree,根据DESCRIPTION进行排序,sort除了设定natural之外,也可以指定一个实现java.util.Comparator的类别名称。
eg:
public class UpPurviewComparator implements Comparator{
public UpPurviewComparator() { }
public int compare(Object o1, Object o2){
if(o1 == null){
return o2 == null ? 0 : 1;
}
if(o2 == null){
return -1;
}
if(o1 instanceof UpPurview && o2 instanceof UpPurview){
UpPurview p1= (UpPurview)o1;
UpPurview p2= (UpPurview)o2;
String name1=p1.getModelname();
String name2=p2.getModelname();
if(p1.getId().compareTo(p2.getId())==0) return 0;
if(name1.compareTo(name2)>0) return -1;
if(name1.compareTo(name2)<0) return 1;
else return -1;
}
return -1;
}
}
<set name="upPurviews" cascade="none" table="UP_ROLE_PV_R" sort="com.ztenc.oa.mfp.dao.user.UpPurviewComparator">
<key>
<column name="role_id" not-null="true" />
</key>
<many-to-many column="purview_id" class="com.ztenc.oa.mfp.bean.UpPurview" />
</set>
private Set upPurviews = new TreeSet(new UpPurviewComparator());
利用数据库本身的排序功能:
-----------------------------------
如果是利用数据库本身的排序功能,则使用order-by设定排序的方式,Hibernate会使用SQL语句在数据库中进行排序,例如在Set中是这么设定的:
<set name="addrs" table="ADDRS" order-by="ADDRESS desc">
<key column="USER_ID"/>
<element type="string" column="ADDRESS" not-null="true"/>
</set>
在类中:
private Set properties= new TreeSet();
在Map中也是相同的设定方式,您也可以利用数据库中的函式功能,例如:
<map name="files" table="FILES" order-by="lower(FILENAME)">
<key column="USER_ID"/>
<index column="DESCRIPTION" type="string"/>
<element type="string" column="FILENAME" not-null="true"/>
</map>
使用这个方法进行排序时,Hibernate会使用LinkedHashSet或LinkedHashMap实现查询时的排序,所以这个方法仅适用于JDK 1.4或以上的版本。
转:http://hi.baidu.com/accpandsvse/blog/item/d42a0639f75bd22db8998ffd.html