Hibernate排序

在查询对象的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值