大响马 2012-06-21 12:13
浏览 205
已采纳

Hibernate 双向多对多关联的问题,更新一主表字段,关联表就会删除该记录在关联表中的对应

是这样,挺普通的设计,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]

  • 写回答

4条回答 默认 最新

  • dashabenmao 2012-06-21 12:40
    关注

    把XML 里的级联关系去掉呢??

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog