Hibernate: 一对多里对 set 的排序

xhljames 2013-09-10

一:注解http://www.iteye.com/topic/142677

@OneToMany(mappedBy="user",fetch=FetchType.EAGER)         
@OrderBy(name = "tel_id DESC")   
public Set<Tel> getTels() {         
    return tels;         
}

谢谢各位,我已经解决了,

我翻看了文档,orderby的方式对list是有效的

set和map用mapkey

我把set改为list了,用了orderby就能排序了。

谢谢你们了。

二:非注解:http://uule.iteye.com/blog/1046723

一对多里面对set的排序,建议采用以下办法:

1、首先,将POJO中的set成员的类型改为TreeSet类型,因为TreeSet是实现了SortedSet的可排序集合类。

private Set labproductflowinfos = new TreeSet(new FlowInfoComparator());//为 TreeSet 提供一个自定义的比较器

然后修改配置文件,为<set>添加sort属性,属性取值可以为一个自定义的比较器。如下:

public class FlowInfoComparator implements Comparator {    
 public int compare(Object o1, Object o2) {    
    if(o1 instanceof Labproductflowinfo &&    
      o2 instanceof Labproductflowinfo){    
     Integer s1 = ((Labproductflowinfo)o1).getSequenceNum();    
     Integer s2 = ((Labproductflowinfo)o2).getSequenceNum();    
     return s1.intValue() - s2.intValue();    
    }    
    return 0;    
}}
   
<set name="labproductflowinfos" inverse="true"    
          cascade="all-delete-orphan" lazy="false" sort="com.zsc.hibernate.FlowInfoComparator">
  

2、第三种方式比较简单就是在hbm配置文件里配置采取排序的序列。<set...order-by="dateasc"/>第一个参数是选择排序的序列,第二个参数是升序还是降序。

相关推荐