大响马 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 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口