【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.重启服务进行测试就可以了。