Hibernate中双向关联加载排序的解决方案

问题:Hibernate的双向关联中,一方加载另一方时,怎么样达到按自定义规则排序的目的呢?

实例:角色和菜单是多对多的关系,为角色分配菜单后,加载菜单时,我需要按照菜单的ID来排序显示。

解决办法:

1. 通过在hbm配置文件中配置解决,需要自定义比较器。

1) 在多对多的主控端指定sort属性

这里的主控端为role,受控端为menu。

role的配置为:

      

menu的配置为:

     

2) 自定义MenuComparaTor

这里需要实现ComparaTor接口,自定义比较器

/** *//*** 菜单排序比较器* MenuComparaTor* @author allen*/public class MenuComparaTor implements ComparaTor {   /** *//**   * 按照菜单的ID进行排序   * @see java.util.ComparaTor#compare(java.lang.Object, java.lang.Object)   */   public int compare(Object o1, Object o2) {     if(o1 == null){        return (o2 == null) ? 0 : 1;     }      if(o2 == null){        return -1;     }     int cc = 0;     if (o1 instanceof MenuInfoVO && o2 instanceof MenuInfoVO) {       cc = (((MenuInfoVO)o1).getId()).compareTo(((MenuInfoVO)o2).getId());     }     return ((cc 0) ? 1 : 0);   }}

我在这里是以菜单的ID为排序关键字的,也可通过其他的诸如时间等进行排序,相当灵活,且代码量不大。

2. 使用idbag为关系表增加一个主键。

可以理解为人工的id生成器,就好像是实体类一样!集合的每一行都有一个不同的人造关键字。但是,Hibernate没有提供任何机制来让你取得某个特定行的人造关键字。注意的更新性能要比普通的高得多!Hibernate可以有效的定位到不同的行,分别进行更新或删除工作,就如同处理一个list, map或者set一样。

   菜单列表           主键                    

感觉第二个方法是按照我为角色配置菜单的顺序排序的,灵活性比较差,所以个人认为还是第一个方法比较好。

明天是世上增值最快的一块土地,因它充满了希望

Hibernate中双向关联加载排序的解决方案

相关文章:

你感兴趣的文章:

标签云: