<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>
<set?name="roleMenus"?table="ROLE_MENU">
???<key?column="RM_MENU_MENU_ID"?/>
???<many-to-many?column="RM_ROLE_ROLE_ID"?class="domain.RoleInfoVO"?/>?
??</set>
/**?*//**
?*?菜单排序比较器
?*?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);
????}
}
<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>?