hibernate入门(九)关联关系中的高级应用_级联操作

 

1. 级联操作

在前面的一对多操作中已经有所体现,现在回到前面的一对多操作中,进行一些修改,修改内容如下:

Set<Employee> emps = new HashSet<Employee>();

emps.add(emp1);

emps.add(emp2);

depart.setEmps(emps);
去掉这段注释,并把s.save(emp1); s.save(emp2); 注释掉,然后运行发现出错。原因是:当我们保存Department depart 对象时,发现它所关联到的两个Employee   emp 对象并未保存,而这种要依赖别的对象的操作即是级联操作,级联操作主要体现在关联关系中,且是可配置的,只是默认的级联操作是被设为”none”, 而如果我们希望进行级联操作,只需要在<set> 配置中增加cascade 属性,比如我们现在Department.hbm.xml <set> 元素下增加 cascade = "save-update" 属性后,再来执行会发现正常,原因是Hibernate 进行了级联操作,相当Hibernate 帮我们写了注释掉的“s.save(emp1); s.save(emp2) ”这两句内容。下面列表说明级联操作的可选值。

cascade 属性值

功能作用描述

none

在保存、修改对象时,不对与之关联的对象进行任何操作,它作为cascade 默认值。

save-update

当保存或修改对象时,级联保存所有与之关联的临时对象,级联更新所有与之关联的脱管(游离)对象。

delete

当删除时,级联删除所有与之关联的对象

all

包括save-updatedelete 两种行为

delete-orphan

删除所有和本对象解除关联关系的对象,主要表现在“一对多”中。

all-delete-orphan

包括alldelete-orphan 的行为

说明 :(1cascade 可以在<set><list><bag><map> 中进行配置,即在“多对一”、“一对多”、“多对多”、“一对一 这些关联关系中,“级联”都是可配的在一般的对象中不能配置。(2 )可以为其配置多个属性值,中间用逗号分隔。如cascade=”save-update,delete”.(3) 一般只在“一对一  一对多”配置级联,而不会在“多对一 多对多”中配置级联,但在配置时最好的方法是根据实际情况进行配置。现举例说明:比如在“部门和员工”之间,如果我们希望部门取消时,属于该部门的员工并不会被取消,而是分到的别的部门,我们就不应为cascade 配置“delete ”值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值