假如我有表menu(menuId,menuName,location)和表role(roleId,roleName)和关系表role_menu(id,roleId,menuId)
表中数据
menu:                                  role:                         role_menu:
menuId  menuName  location             roleId  roleName                 id  roleId  menuId
   1       aa        aa                  1       aa                      1     1       1
   2       bb        bb                  2       bb                      2     1       2
   3       cc        cc                  3       cc                      3     1       3
                                                                         4     2       1
                                                                         5     2       2
                                                                         6     3       3
现在假如当我删除表menu中menuId为1的数据时,hibernate会自动帮我删除表role_menu中menuId为1的数据(1、4),表role中的数据不变。当我删除表role中roleId为1的数据时,hibernate会自动帮我删除表role_menu中roleId为1的数据(1、2、3),表role中的数据不变。修改表menu中的数据或者表role中的数据时,其他表中的数据不表,关系表中的数据也不删除。
menu.hbm.xml:
___________________________________________________________________________________
<set name="roles" table="role_menu" lazy="true" cascade="save-update">
  <key column="menuId" />
  <many-to-many class="com.yinbo.model.Role" column="roleId" outer-join="auto" />
</set>
____________________________________________________________________________________
role.hbm.xml:
<set name="menuItems" table="role_menu" lazy="true" cascade="save-update">
  <key column="roleId" />
  <many-to-many class="com.yinbo.model.MenuItem" column="menuId" outer-join="auto" />
</set>当我这样配置时,删除的话可以达到需求,但每次一修改menu中的记录,关系表中对应的记录就会被删除,修改role中的数据时,关系表中的记录不会被删除。
求教各位大侠我应该怎么配置关系才能完全达到需求。

解决方案 »

  1.   

    不好意思  我忘说了 在我的表menu中还有一个外键 roleId如果在menu.hbm.xml中加上inverse="true"时,删除menu时会报错“违反完整性约束”
      

  2.   

    你的映射文件写的不对! 照你这种写法应该是role_menu 是中间表 应该将多对多 拆分为两个多对一给你个例子
    <hibernate-mapping>
      <class table="t_userrole" name="com.zzq.model.UserRole">
        <id name="id">
          <generator class="native"/>
        </id>
        
        <many-to-one name="role"/>
        <many-to-one name="user"/>
        
      </class>
    </hibernate-mapping><hibernate-mapping>
      <class table="t_user" name="com.zzq.model.User">
        <id name="id">
          <generator class="native"/>
        </id>
        <property name="username" length="30" not-null="true" unique="true"/>
        <property name="password" length="30" not-null="true"/>
     
      </class>
    </hibernate-mapping><hibernate-mapping>
      <class table="t_role" name="com.zzq.model.Role">
        <id name="id">
          <generator class="native"/>
        </id>
        <property name="name" length="30" not-null="true" unique="true"/>
      </class>
    </hibernate-mapping>