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




menu的配置為:




2) 自定義MenuComparator



























我在這里是以菜單的ID為排序關鍵字的,也可通過其他的諸如時間等進行排序,相當靈活,且代碼量不大。
<idbag>
的更新性能要比普通的<bag>
高得多!Hibernate可以有效的定位到不同的行,分別進行更新或刪除工作,就如同處理一個list, map或者set一樣。








感覺第二個方法是按照我為角色配置菜單的順序排序的,靈活性比較差,所以個人認為還是第一個方法比較好。
這是網上所提供的解決方案。
Hibernate在處理一對多,多對一雙向關聯時,用order-by應該就可以解決問題。
在處理多對多時,用最上面的方法,當相等時就可能被覆蓋,這時就要有第二次比較。
public class EnterComparator implements Comparator {
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 Entertainment && o2 instanceof Entertainment) {
cc = (((Entertainment) o1).getPosition())
.compareTo(((Entertainment) o2).getPosition());
if (cc == 0) {
cc = (((Entertainment) o1).getId())
.compareTo(((Entertainment) o2).getId());
}
}
return ((cc < 0) ? 1 : (cc > 0) ? -1 : 0);
}
}