實例:角色和菜單是多對多的關係,爲角色分配菜單後,加載菜單時,我需要按 照菜單的ID來排序顯示。
解決辦法:
role的配置爲:
< key column ="RM_ROLE_ROLE_ID" />
< many-to-many column ="RM_MENU_MENU_ID" class ="domain.MenuInfoVO" />
</ set >
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爲排序關鍵字的,也可通過其他的諸如時間等進行排序,相當靈活,且代碼量不大。
<idbag
>
的更新性能要比普通的<bag>
高
得多!Hibernate可以有效的定位到不同的行,分別進行更新或刪除工作,就如同處理一個list, map或者set一樣。< 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 >
感覺第二個方法是按照我爲角色配置菜單的順序排序的,靈活性比較差,所以個人認爲還是第一個 方法比較好。