首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

一对多的更新与剔除

2012-11-04 
一对多的更新与删除?项目中遇到多对多关联的情况,刚开始很简单的按一般的设置,在配置文件中指定了第三方表

一对多的更新与删除

?项目中遇到多对多关联的情况,刚开始很简单的按一般的设置,在配置文件中指定了第三方表,后来发现这样更新SET的时候不太方便,也看到网上的高手们建议最好把第三方表也实例化成对象,做成两个多对一关联。

<many-to-one name="menuid" cascade="save-update" not-found="ignore"/>
<many-to-one name="roleid" cascade="save-update" not-found="ignore"/>
</class><set name="menus" cascade="all-delete-orphan" inverse="true" batch-size="20" lazy="true">
??? <key column="roleid"/>
??? <one-to-many not-found="ignore"/>
</set>
</class>

?

<set name="roles" cascade="all-delete-orphan" inverse="true" lazy="true" batch-size="20">
??? <key column="menuid"/>
??? <one-to-many not-found="ignore"/>
</set>
</class>

?

?根据角色动态显示菜单,因此角色跟菜单是多对多关联,利用中间类RoleMenu做成 1<--->多<--->1

这样配置起来似乎没有什么问题,但是在修改一个角色所拥有的菜单集合时却遇到了问题:

? A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance

在网上找帮助终于知道通过以下三个步骤可以解决这个问题。

1.把实体类的Set集合方法设置成private :private void setMenus(RoleMenu rm)

2.设置集合的方法成了私有的,所以要增加add方法

先发出了删除集合对象的语句,再发出删除role对象的语句Hibernate: delete from t_role_menu where id=?
Hibernate: delete from t_role where id in (?)

?

热点排行