作者:何征天
课程视频地址:https://ke.qq.com/course/273907
1.1. 技术分析之级联的取值(cascade的取值)和孤儿删除(在一对多的环境下才有)
需要大家掌握的取值如下* none -- 不使用级联
* save-update -- 级联保存或更新
* delete -- 级联删除
* delete-orphan --孤儿删除.(注意:只能应用在一对多关系)
* all --除了delete-orphan的所有情况.(包含save-update delete)
* all-delete-orphan -- 包含了delete-orphan的所有情况.(包含save-update delete delete-orphan)
2. 孤儿删除(孤子删除),只有在一对多的环境下才有孤儿删除
* 在一对多的关系中,可以将一的一方认为是父方.将多的一方认为是子方.孤儿删除:在解除了父子关系的时候.将子方记录就直接删除。
* <setname="linkmans" cascade="delete-orphan">
1.2.1. 孤儿删除示例
1.修改Linkman.hbm.xml和Customer.hbm.xml
Linkman.hbm.xml
<many-to-one name="Customer" class="com.igeek.demo1.Customer" column="lkm_cust_id"></many-to-one> |
Customer.hbm.xml
<set name="linkmans" cascade="delete-orphan"> <key column="lkm_cust_id"></key> <one-to-many class="com.igeek.demo1.Linkman"/> </set> |
2.在TestOne2Many类中添加测试方法
//孤儿删除 @Test publicvoid run6(){ Session session = HibernateUtils.getCurrentSession(); Transaction tr = session.beginTransaction(); //获取一个客户,这个客户下有2个联系人,ID 为11,和12 Customer c = session.get(Customer.class, 8L);
//获取一个联系人 Linkman m = session.get(Linkman.class, 11L);
//联系与客户解除关系 c.getLinkmans().remove(m);
tr.commit(); } |
3.测试
Hibernate级联开发配置, cascade常用的取值:
Ø save-update:对关联瞬时对象执行save操作,对关联托管对象执行update
Ø delete:对关联对象进行删除
总结:
一般在业务开发中,不要两端都配置级联,(多方尽量不要配置级联,尽量在一方配置级联)。