實(shí)例:角色和菜單是多對(duì)多的關(guān)系,為角色分配菜單后,加載菜單時(shí),我需要按照菜單的ID來(lái)排序顯示。
解決辦法:




menu的配置為:




2) 自定義MenuComparator



























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








感覺(jué)第二個(gè)方法是按照我為角色配置菜單的順序排序的,靈活性比較差,所以個(gè)人認(rèn)為還是第一個(gè)方法比較好。
這是網(wǎng)上所提供的解決方案。
Hibernate在處理一對(duì)多,多對(duì)一雙向關(guān)聯(lián)時(shí),用order-by應(yīng)該就可以解決問(wèn)題。
在處理多對(duì)多時(shí),用最上面的方法,當(dāng)相等時(shí)就可能被覆蓋,這時(shí)就要有第二次比較。
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);
}
}