处理hibernate多重级联关系下的删除解决方法

来源:互联网 发布:产品淘宝上线流程 编辑:程序博客网 时间:2024/04/29 04:00

set节点之cascade属性
all                  : 对所有操作都进行级联
none                : 对所有操作都不进行级联
save-update          : 执行更新操作时级联
delete              : 执行删除操作时级联
inverse设为true,由many一方删除
inverse是“反转”的意思,表示关联关系的控制权。
为true,表示由对方负责关联关系的添加和删除;
为false,表示由自己负责维护关联关系

 

//人员
person
(
id
int identity(1,1) primary key,
email varchar(
50)
)

//邮箱
email
(
id
int identity(1,1) primary key,
personid
int,              //对应person表的id,表示这个邮箱属于某个人
address varchar(50)        //email地址
)

//信件
letter
(
id
int identity(1,1) primary key,
emailid
int,              //对应email表的id,表示这封信属于某个邮箱
from address varchar(50), //发送者
title varchar(20),        //标题
content varchar(20)       //内容
)

 

利用hibernate,如何进行多重级联删除,即:删除一个人,则同时删除他对应的邮箱及邮箱里的信件

 

那么利用hibernate只需这样

 

最终解决方法是person中的xxx.hbm.xml加上 <set name="实体名(person)" inverse="true" cascade="delete"> </set>
然后在email中的也加上 <set name="实体名(email)" inverse="true" cascade="delete"> </set>

简单的说就是在主表的xxx.hbm.xml的 <set> </set>的属性中加上cascade="delete"它,就可以级联删除

 

person是email的主表,而email又是letter的主表
这样配置是不会违反题目意思的
也就是说在Person中加cascade="delete"只会删除email
而email中加这个属性也是一样

并且三张表都有关系


原创粉丝点击