【Hibernate】set排序

使用hibernate进行一对多操作的时候,普遍使用HashSet进行操作。但是HashSet是无序集合,对此可以使用TreeSet进行排序。

1.将HashSet改为TreeSet

1 private Set<EbgRequmentItem> items = new HashSet<EbgRequmentItem>();

--》

 1 private Set<EbgRequmentItem> items = new TreeSet<EbgRequmentItem>(new Comparator<EbgRequmentItem>(){
 2          @Override
 3          public int compare(EbgRequmentItem o1, EbgRequmentItem o2) {
 4               //默认如果是比较结果为0的话,会认为重复,默认去掉,这里可以做下处理
 5               if( o1.getName().compareTo(o2.getName()) == 0){
 6                   //返回-1不会去重
 7                   return -1;
 8               }else{
 9                   //降序
10                   //return o2.getName().compareTo(o1.getName()); 
11                   //升序
12                   return o1.getName().compareTo(o2.getName()); 
13               }
14          }
15  }); 

2.新增TreeSet排序比较器对象

 1 package ?????.comparator;
 2 
 3 import ?????.EbgRequmentItem;
 4 
 5 import java.util.Comparator;
 6 
 7 /**
 8  * 采购产品需求项排序比较器
 9  * 
10  * @author Tidy
11  *
12  */
13 public class EbgRequimentItemComparator implements Comparator<EbgRequmentItem> {
14 
15     @Override
16     public int compare(EbgRequmentItem o1, EbgRequmentItem o2) {
17         return o1.getName().compareTo(o2.getName()); 
18     }
19 
20 }

3.在hbm.xml文件中添加sort属性

1 <set name="items" cascade="delete-orphan" inverse="true" lazy="true">
2     <key column="PRODUCT_REQ_ID"></key>
3     <one-to-many class="EbgRequmentItem"/>
4 </set>

--》

1 <set name="items" cascade="delete-orphan" inverse="true" lazy="true" sort="??????.comparator.EbgRequimentItemComparator">
2     <key column="PRODUCT_REQ_ID"></key>
3     <one-to-many class="EbgRequmentItem"/>
4 </set>

4.重启服务进行测试就可以了。

原文地址:https://www.cnblogs.com/zengweiming/p/4134676.html