|
Set與Map的排序
在查詢對(duì)象的Set或Map成員時(shí),您可以對(duì)其進(jìn)行排序,排序可以在兩個(gè)層次進(jìn)行,一個(gè)是在Java執(zhí)行環(huán)境中進(jìn)行,一個(gè)是利用數(shù)據(jù)庫(kù)本身的排序功能。 如果要在Java執(zhí)行環(huán)境中進(jìn)行排序,可以映像文件中設(shè)定sort屬性,例如若為Set,則如下設(shè)定: <set name="addrs" table="ADDRS" sort="natural"> <key column="USER_ID"/> <element type="string" column="ADDRESS" not-null="true"/> </set> 藉由指定sort為natural,Hibernate在加載數(shù)據(jù)庫(kù)的數(shù)據(jù)時(shí),將使用java.util.SortedSet型態(tài)對(duì)象,如果是String,則根據(jù)compareTo()方法來進(jìn)行排序,上面的設(shè)定將會(huì)根據(jù)FILENAME進(jìn)行排序。 如果是Map的話,則如下設(shè)定: <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> 上面的設(shè)定將使用java.util.SortedTree,根據(jù)DESCRIPTION進(jìn)行排序,sort除了設(shè)定natural之外,也可以指定一個(gè)實(shí)現(xiàn)java.util.Comparator的類別名稱。 以上的說明都是在查詢數(shù)據(jù)時(shí)使用,User類別的屬性成員撰寫時(shí)可以是Map或Set型態(tài),注意當(dāng)設(shè)定sort="natural",并想要進(jìn)行數(shù)據(jù)儲(chǔ)存時(shí),User類別的屬性成員也必須更改為SortedMap或SortedSet型態(tài),例如java.util.TreeMap或 java.util.TreeSet,否則會(huì)發(fā)生ClassCastException。 如果是利用數(shù)據(jù)庫(kù)本身的排序功能,則使用order-by設(shè)定排序的方式,Hibernate會(huì)使用SQL語句在數(shù)據(jù)庫(kù)中進(jìn)行排序,例如在Set中是這么設(shè)定的: <set name="addrs" table="ADDRS" order-by="ADDRESS desc"> <key column="USER_ID"/> <element type="string" column="ADDRESS" not-null="true"/> </set> 在Map中也是相同的設(shè)定方式,您也可以利用數(shù)據(jù)庫(kù)中的函式功能,例如: <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> 使用這個(gè)方法進(jìn)行排序時(shí),Hibernate會(huì)使用LinkedHashSet或LinkedHashMap實(shí)現(xiàn)查詢時(shí)的排序,所以這個(gè)方法僅適用于JDK 1.4或以上的版本。 |
|
|