關鍵字: hibernate中雙向關聯載入排序的解決方案
問題:hibernate的雙向關聯中,一方載入另一方時,怎麼樣達到按自定義規則排序的目的呢?
例項:角色和選單是多對多的關係,為角色分配選單後,載入選單時,我需要按照選單的id來排序顯示。
解決辦法:
1. 通過在hbm配置檔案中配置解決,需要自定義比較器。
1) 在多對多的主控端指定sort屬性
這裡的主控端為role,受控端為menu。
role的配置為:
menu的配置為:
2) 自定義menucomparator
這裡需要實現comparator介面,自定義比較器
/** *//**
* 選單排序比較器
* menucomparator
* @author allen
*/public class menucomparator implements comparator
if(o2 == null)
int cc = 0;
if (o1 instanceof menuinfovo && o2 instanceof menuinfovo)
return ((cc < 0) ? -1 : (cc > 0) ? 1 : 0);}}
我在這裡是以選單的id為排序關鍵字的,也可通過其他的諸如時間等進行排序,相當靈活,且**量不大。
2. 使用idbag為關係表增加乙個主鍵。
可以理解為人工的id生成器,就好像是實體類一樣!集合的每一行都有乙個不同的人造關鍵字。但是,hibernate沒有提供任何機制來讓你取得某個特定行的人造關鍵字。注意
的更新效能要比普通的
高得多!hibernate可以有效的定位到不同的行,分別進行更新或刪除工作,就如同處理乙個list, map或者set一樣。
選單列表
主鍵
感覺第二個方法是按照我為角色配置選單的順序排序的,靈活性比較差,所以個人認為還是第乙個方法比較好。
這是網上所提供的解決方案。
hibernate在處理一對多,多對一雙向關聯時,用order-by應該就可以解決問題。
在處理多對多時,用最上面的方法,當相等時就可能被覆蓋,這時就要有第二次比較。
public class entercomparator implements comparator
if (o2 == null)
int cc = 0;
if (o1 instanceof entertainment && o2 instanceof entertainment)
}return ((cc < 0) ? 1 : (cc > 0) ? -1 : 0);
}}
hibernate雙向關聯轉化為Json資料
用jquery json開發過程遇到的dug 想了半天,才想到是hibernate的問題,hibernate產生了死迴圈查詢 跟hibernate的配置檔案有關 解決方案,在轉成json物件的時候過濾掉bean中引起死迴圈查詢的屬性 一般為設定的外來鍵 轉換的時候呼叫過濾器 jsonconfig c...
Hibernate雙向多對多關聯
一 配置雙向多對多關聯 以project類 專案 和emp類 員工 為例 1 建立project類,並需要定義集合型別的emp屬性 public class project public void setpid integer pid public string getpname public vo...
Hibernate雙向多對多關聯
一 配置雙向多對多關聯 以project類 專案 和emp類 員工 為例 1 建立project類,並需要定義集合型別的emp屬性 public class project public void setpid integer pid public string getpname public vo...