hibernate多对多关系删除关联,更新不关联的问题
我的表结构如下role(角色)idnamedescriptionpopedom(权限)idnamedescriptionrole_popedom(角色权限)roleidp...
我的表结构如下
role(角色)
id name description
popedom(权限)
id name description
role_popedom(角色权限)
roleid popedomid
popedom.hbm.xml主要配置
<!-- 映射上下级关系 开始 -->
<many-to-one name="parentPopedom" class="com.hill.eqss.bo.Popedom" fetch="select">
<column name="parentpopedom" />
</many-to-one>
<set name="childPopedoms" inverse="true">
<key>
<column name="parentpopedom" />
</key>
<one-to-many class="com.hill.eqss.bo.Popedom" />
</set>
<!-- 映射上下级关系 结束 -->
<set name="roles" table="role_popedom">
<key column="popedomid"></key>
<many-to-many class="com.hill.eqss.bo.Role" column="roleid" />
</set>
role.hbm.xml主要配置
<set name="popodoms" table="role_popedom">
<key column="roleid"></key>
<many-to-many class="com.hill.eqss.bo.Popedom" column="popedomid"/>
</set>
问题:
我在删除role和popedom数据时,关联到了role_popedom数据。这是我需要的。
我在更新role和popedom数据时,hibernate执行了删除role_popedom数据。实际情况下,我并不需要这操作。
请问我应该怎么配置?还有就是这个关系表中数据怎么更新? 展开
role(角色)
id name description
popedom(权限)
id name description
role_popedom(角色权限)
roleid popedomid
popedom.hbm.xml主要配置
<!-- 映射上下级关系 开始 -->
<many-to-one name="parentPopedom" class="com.hill.eqss.bo.Popedom" fetch="select">
<column name="parentpopedom" />
</many-to-one>
<set name="childPopedoms" inverse="true">
<key>
<column name="parentpopedom" />
</key>
<one-to-many class="com.hill.eqss.bo.Popedom" />
</set>
<!-- 映射上下级关系 结束 -->
<set name="roles" table="role_popedom">
<key column="popedomid"></key>
<many-to-many class="com.hill.eqss.bo.Role" column="roleid" />
</set>
role.hbm.xml主要配置
<set name="popodoms" table="role_popedom">
<key column="roleid"></key>
<many-to-many class="com.hill.eqss.bo.Popedom" column="popedomid"/>
</set>
问题:
我在删除role和popedom数据时,关联到了role_popedom数据。这是我需要的。
我在更新role和popedom数据时,hibernate执行了删除role_popedom数据。实际情况下,我并不需要这操作。
请问我应该怎么配置?还有就是这个关系表中数据怎么更新? 展开
1个回答
展开全部
在多对多关系中,中间关系表中的数据本身就是靠role和popedom来进行控制的。
当添加role或popedom时,会自动根据多对多的set集合中的数据在对中间关系表的数据进行添加。
删除时也一样,根据Set集合中的数据来对中间关系表进行删除。
而当进行更新操作时,hibernate会自动先将中间关系表中的数据删除,再将现在Set集合中的数据添加到中间表中,以完成修改的目的。(先删除原有数据,再添加新的数据)
如果不想这样自动修改,可以直接使用HQL进行修改,而不使用session.update()方法,这样可以防止这种关系表的级联操作。也可以通过配置inverse="true"来完成。
关系表中的数据只能通过这种关联的方式来更新。
当添加role或popedom时,会自动根据多对多的set集合中的数据在对中间关系表的数据进行添加。
删除时也一样,根据Set集合中的数据来对中间关系表进行删除。
而当进行更新操作时,hibernate会自动先将中间关系表中的数据删除,再将现在Set集合中的数据添加到中间表中,以完成修改的目的。(先删除原有数据,再添加新的数据)
如果不想这样自动修改,可以直接使用HQL进行修改,而不使用session.update()方法,这样可以防止这种关系表的级联操作。也可以通过配置inverse="true"来完成。
关系表中的数据只能通过这种关联的方式来更新。
追问
你的意思就是说,我更新时,进行了删除是对的,只是没有insert操作是错误的,我能这样理解吗?
我刚也测试了一下添加role_popedom的数据。在role对象中有Set popodoms这样一个属性。这里操作好像有些问题。请在帮我指点一下
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询