<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 40,  comments - 187,  trackbacks - 0
    問題:Hibernate的<many-to-many>雙向關聯中,一方加載另一方時,怎么樣達到按自定義規則排序的目的呢?

    實例:角色和菜單是多對多的關系,為角色分配菜單后,加載菜單時,我需要按照菜單的ID來排序顯示。

    解決辦法:
    1. 通過在hbm配置文件中配置解決,需要自定義比較器。
    ? 1) 在多對多的主控端指定sort屬性
    ? 這里的主控端為role,受控端為menu。
    ? role的配置為:
    ?
    <set?name="roleMenus"?table="ROLE_MENU"?inverse="false"?lazy="false"?sort="menu.MenuComparator">
    ???
    <key?column="RM_ROLE_ROLE_ID"?/>
    ???
    <many-to-many?column="RM_MENU_MENU_ID"?class="domain.MenuInfoVO"?/>?
    ??
    </set>

    menu的配置為:
    <set?name="roleMenus"?table="ROLE_MENU">
    ???
    <key?column="RM_MENU_MENU_ID"?/>
    ???
    <many-to-many?column="RM_ROLE_ROLE_ID"?class="domain.RoleInfoVO"?/>?
    ??
    </set>

    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?:?(cc?>?0)???1?:?0);
    ????}

    }


    我在這里是以菜單的ID為排序關鍵字的,也可通過其他的諸如時間等進行排序,相當靈活,且代碼量不大。

    2. 使用idbag為關系表增加一個主鍵。
    ?
    <idbag>可以理解為人工的id生成器,就好像是實體類一樣!集合的每一行都有一個不同的人造關鍵字。但是,Hibernate沒有提供任何機制來讓你取得某個特定行的人造關鍵字。注意<idbag>的更新性能要比普通的<bag>高得多!Hibernate可以有效的定位到不同的行,分別進行更新或刪除工作,就如同處理一個list, map或者set一樣。
    <idbag?name="roleMenus"?table="ROLE_MENU"?order-by="RM_MENU_MENU_ID?desc">??
    ????
    <meta?attribute="field-description">菜單列表</meta>??
    ????????
    <collection-id?column="id"?type="java.lang.Long">??
    ??????????
    <meta?attribute="field-description">主鍵</meta>??
    ??????????
    <generator?/>??
    ????????
    </collection-id>??
    ????????
    <key?column="RM_ROLE_ROLE_ID"/>??
    ????????
    <many-to-many?column="RM_MENU_MENU_ID"?class="domain.MenuInfoVO"?/>??
    </idbag>?

    感覺第二個方法是按照我為角色配置菜單的順序排序的,靈活性比較差,所以個人認為還是第一個方法比較好。
    posted on 2007-01-18 16:25 小立飛刀 閱讀(3711) 評論(6)  編輯  收藏 所屬分類: Hibernate

    FeedBack:
    # re: Hibernate中雙向關聯加載排序的解決方案
    2007-01-22 13:24 | 網絡電話
    不錯,多謝  回復  更多評論
      
    # re: Hibernate中雙向關聯加載排序的解決方案
    2007-01-22 17:35 | 小雪飛刀
    不客氣  回復  更多評論
      
    # re: Hibernate中雙向關聯加載排序的解決方案[未登錄]
    2007-07-30 18:08 | aaron
    問個hibernate的問題:
    類User和類Group是多對一的關系
    數據庫中有user表和group表
    group表中有id,name,address等字段。
    數據庫表user中有個groupId字段用來表明該user是屬于哪個group。

    要在程序中查詢user,要求按其所屬的group名字長度降序排列,請問該如何查詢呢?
      回復  更多評論
      
    # re: Hibernate中雙向關聯加載排序的解決方案
    2007-07-31 14:35 | 小雪飛刀
    @aaron

    沒仔細研究,但認為可以寫了比較器實現您所說的功能。用比較器比較GROUP的名字長度,按降序輸出。在加載GROUP后顯示用戶,之下的用戶就會按照所述功能排序。
      回復  更多評論
      
    # re: Hibernate中雙向關聯加載排序的解決方案
    2008-04-21 16:13 | 謝謝
    很詳細 ,謝謝  回復  更多評論
      
    # re: Hibernate中雙向關聯加載排序的解決方案
    2008-04-21 16:42 | 小立飛刀
    @謝謝

    客氣了
      回復  更多評論
      
    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    生存或毀滅,這是個必答之問題:是否應默默的忍受坎苛命運之無情打擊,還是應與深如大海之無涯苦難奮然為敵,并將其克服。此二抉擇,究竟是哪個較崇高?

    常用鏈接

    留言簿(12)

    隨筆分類(43)

    相冊

    收藏夾(7)

    朋友的博客

    電子資料

    搜索

    •  

    積分與排名

    • 積分 - 302686
    • 排名 - 192

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产免费综合| 自拍偷自拍亚洲精品情侣| 日本高清免费中文在线看| 亚洲AV无码一区二区三区电影| 亚洲精品国产日韩| 亚洲码欧美码一区二区三区| 免费无码国产V片在线观看| 日韩a在线观看免费观看| 亚洲精品99久久久久中文字幕| 亚洲精品夜夜夜妓女网| 亚洲三级视频在线| 亚洲精品精华液一区二区| 中文字幕视频免费在线观看| 香港a毛片免费观看| 免费无码又爽又刺激毛片| 亚洲伊人久久大香线蕉综合图片| 精品久久亚洲中文无码| 成全视频在线观看免费高清动漫视频下载 | 亚洲AV日韩综合一区尤物| 欧美最猛性xxxxx免费| 自拍偷自拍亚洲精品情侣| 四虎影视在线影院在线观看免费视频 | 亚洲中文无码永久免费| 看一级毛片免费观看视频| 84pao强力永久免费高清| 毛片免费在线观看网址| 国产偷国产偷亚洲清高APP| 国产精品成人免费一区二区| 精品久久久久久久久亚洲偷窥女厕| 免费人成视频在线观看视频| 亚洲国产日韩在线| 亚洲午夜免费视频| 中文字幕乱码亚洲无线三区| 亚洲伊人成无码综合网| 国产成人亚洲精品蜜芽影院| 久久久久亚洲AV成人网人人软件| 亚洲丁香婷婷综合久久| 激情综合色五月丁香六月亚洲| h视频在线免费看| 四虎精品亚洲一区二区三区| 亚洲免费在线视频播放|