CRM中Customer遇到的Set属性排序问题

今天在CRM中Customer遇到的Set<Contact>属性排序问题,后来翻了下孙卫琴的《精通Hibernate》 Hibernate中的集合 Hibernate中的集合分为四类: 1.bag类:元素无序,可重复 ------------     仅支持数据库排序 2.set类:元素无序,不可重复 -------------    内存排序和数据库排序 3.list类:元素有序,可重复  -------------    不支持任何排序方式 4.array类:数组  5.map类:映射关系                                     内存排序和数据库排序 除bag类集合外,其它集合都可以在java api中找到对应的接口类, bag可以认为对应java中的List Hibernate中将集合分为2类: 一是值集合,集合中存储的都是基本数据类型,包括String类型,及其它可识别的数据库类型 二是实体集合,集合中存储已经映射了的实体对象,反应对象间的关系。 Hibernate对集合中元素支持两种排序方式: 1.内存排序,通过提供一个实现了Comparator接口的排序器来实现
配置文件:

<set name="children" sort="com.company.project.domain.system.MenuComparator">

    <key>

        <column name="parent_id" not-null="true" />

    </key>

    <one-to-many

        class="com.company.project.domain.system.Menu" />

</set>

java文件:

/**

 * 用来给菜单排序

 *

 * @author wangjian

 *

 */

public class MenuComparator implements Comparator<Menu> {

    public int compare(Menu m1, Menu m2) {

        return m2.getDisplayPosition() - m1.getDisplayPosition();

    }

}
2.数据库排序,就是执行sql语句的时候利用order by {数据库字段1 数据库字段2...} {asc, desc}来达到目的
配置文件:

<set name="children" order-by="DISPLAY_POSITION desc">

    <key>

        <column name="parent_id" not-null="true" />

    </key>

    <one-to-many

        class="com.company.project.domain.system.Menu" />

</set>

注意:order-by属性完全是sql的语法,比如:字段名士数据库字段名称,不是hql中映射的名称,而且可以提供多个排序字段,默认排序方式是asc(升序)
关于集合排序的详细信息,可以参考hibernate官方文档的集合相关章节
附Hibernate 3 annotations 中配置:
	 /* 该客户的所有联系人 

	  * OrderBy(value = "birthday DESC")为Hibernate数据库中排序

	  * */

    @OneToMany(mappedBy="customer",fetch = FetchType.LAZY,cascade=CascadeType.REMOVE)

    @OrderBy(value = "birthday DESC")

    public Set<Contact> getContacts() {

    	return contacts;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值