Hibernate的set排序

http://hi.baidu.com/qihuitoday/blog/item/45b470075f50eac77a894730.html

 

举例1:

在对应的hbm.xml文件中所需要修改的set标签加上order-by属性即可~
eg.

<set name="courses" inverse="true" order-by="weekday asc, period asc, roomId asc">
<key>
<column name="classID" not-null="true" unique="true" />
</key>
<one-to-many class="org.banana.mms.model.Course" />
</set>

当然,order-by里用的是中间表的字段~

举例2:

大家都知道one-to-many的排序可以通过配置一个order-by="** desc"即可实现

    如:

    代码

<set name="clubMessage" table="club_Message" inverse="true" cascade="delete" order-by="create_time desc">
    <key column="club_id" />
    <one-to-many class="com.test.item.club.domain.ClubMessageVO" />
</set>

    上面的hbm属性意义是:一个社区对应多条社区消息,同时将这些消息按create_time排序

import java.util.Comparator;
   
import my.User;
   
public class GBComparator implements Comparator{
   
     public int compare(Object o1, Object o2){
         if(o1 == null){
             return o2 == null ? 0 : 1;
        }
         if(o2 == null){
             return -1;
        }
            
         if(o1 instanceof User && o2 instanceof User){
             return ((User)o1).getAccount().compareTo(((User)o2).getAccount());
        }
            
         return 0;
    }
}

<set
             name="users"
             table="USER_GROUP_REL"
             cascade="none"
             inverse="true"
             sort="my.GBComparator">
            <key column="GROUPING_ID" />
            <many-to-many column="USER_ID" class="User" />
        </set>

举例3:

<set name="userServiceSet" order-by="service_id" cascade="all" inverse="true">
    <key column="user_id" />
   <one-to-many class="UserService"/>
   </set>

注:order-by 的值service_id为 UserService对象所对应的数据库表的列名(字段名)

举例4:

其实也没有什么,内行的人觉得这个是小Case吧。呵呵,这里我不是想说具体的方法,主要是一个感想:
<map
   name="propertyName"
   table="table_name"
   lazy="true|false"
   inverse="true|false"
   cascade="all|none|save-update|delete|all-delete-orphan"
  sort="unsorted|natural|comparatorClass"
  order-by="column_name asc|desc"
   ... 其他属性
>

   <key ... />
   <map-key ... />
   <element ... />
</map>

很多人首先想到的是sort,而且sort已经给出了排序的实现,我们只管天上属性方可。可是我们大多程序员是从学 SQL 转到 Hibernate 这个 ORM 的持久层框架上来的,旧有的观念还是喜欢“order by xxxx desc”。不是说自己怀旧,我发现很多朋友都有这个习惯。所以,一般来说还是建议使用 order-by="column_name asc|desc" 这个属性进行对应表字段的排序配置。在一些特殊时候,我也不建议使用 sort 所自带的属性,建议根据需要来具体实现 java.util.Comparator 这个接口来具体实现自定义排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值