是这样,挺普通的设计,t_role(角色)表与t_menu(可访问资源)表的多对多映射。关联表为t_role_menu
目前别的问题都没,就是我发现每次更新一下某个menu的属性,例如名称啦,关联表里就会将所有该menu记录关联对应的记录删除,搞的我每次都要去把该更改过的menu重新加给role,有时会有多个role有可访问该menu的权限,那我就要挨个给这些role把该条menu给加进去,肯定不行。
断断续续弄了一段时间,没搞定。请各位支个招,上代码!
Role:
[code="java"]
public class Role
{
private Integer id;
private String rolename; // 角色名称
//省略部分.......
private Set<Menu> menus; // 角色可访问菜单
/**
* @return the id
*/
public Integer getId()
{
return id;
}
/**
* @param id
* the id to set
*/
public void setId(Integer id)
{
this.id = id;
}
/**
* @return the rolename
*/
public String getRolename()
{
return rolename;
}
/**
* @param rolename
* the rolename to set
*/
public void setRolename(String rolename)
{
this.rolename = rolename;
}
/**
* @return the menus
*/
public Set<Menu> getMenus()
{
return menus;
}
/**
* @param menus
* the menus to set
*/
public void setMenus(Set<Menu> menus)
{
this.menus = menus;
}
[/code]
Menu:
[code="java"]
private Integer id;
private String menuname;// 菜单名称
private Menu parentMenu;// 上一级菜单
private Set<Menu> childMenus;// 下一级菜单
//省略部分内容.....
private Set<Role> role;// 菜单所属角色
/**
* @return the childMenus
*/
public Set<Menu> getChildMenus()
{
return childMenus;
}
/**
* @param childMenus
* the childMenus to set
*/
public void setChildMenus(Set<Menu> childMenus)
{
this.childMenus = childMenus;
}
/**
* @return the menuname
*/
public String getMenuname()
{
return menuname;
}
/**
* @param menuname
* the menuname to set
*/
public void setMenuname(String menuname)
{
this.menuname = menuname;
}
/**
* @return the role
*/
public Set<Role> getRole()
{
return role;
}
/**
* @param role
* the role to set
*/
public void setRole(Set<Role> role)
{
this.role = role;
}
/**
* @return the parentMenu
*/
public Menu getParentMenu()
{
return parentMenu;
}
/**
* @param parentMenu
* the parentMenu to set
*/
public void setParentMenu(Menu parentMenu)
{
this.parentMenu = parentMenu;
}
[/code]
映射文件
Role.hbm.xml:
[code="xml"]
<!-- 省略部分..... -->
<!-- 角色菜单多对多 -->
<set name="menus" table="t_role_menu" cascade="delete">
<key column="role_id"/>
<many-to-many class="com.cb.recruitment.model.Menu" column="menu_id"/>
</set>
[/code]
Menu.hbm.xml:
[code="xml"]
<!-- 省略部分....-->
<!-- 上级菜单-->
<!-- 下级菜单 -->
<set name="childMenus" >
<key column="parent_id"/>
<one-to-many class="com.cb.recruitment.model.Menu"/>
</set>
<!-- 菜单角色多对多 -->
<set name="role" table="t_role_menu" inverse="true" cascade="delete">
<key column="menu_id"/>
<many-to-many class="com.cb.recruitment.model.Role" column="role_id"/>
</set>
[/code]