关于 all-delete-orphan
当关联双方存在父子关系,就可以在 set 处设定 cascade 为 all-delete-orphan
所谓父子关系,即指由父方控制子方的持久化圣明周期,子方对象必须和一个父方对象关联。如果删除父方对象,应该级联删除所有关联的子方对象;如果一个子方对象不再和一个父方对象关联,应该把这个子方对象删除。
all-deleteorphan 的能力:
1. 当保存或更新父方对象时,级联保存或更新所有关联的子方对象,相当于 cascade 为 save-update
2. 当删除父方对象时,级联删除所有关联的子方对象,相当于 cascade 为 delete
3. 删除不再和父方对象关联的所有子方对象
解除父子关系的 java 语句例如:
customer.getOrders().remove(order);
order.setCustomer(null);
tx.commit();
如果 cascade 属性取默认值 null,当解除父子关系时,会执行如下 sql:
update ORDER set CUSTOMER_ID=null where ID=2
如果要把它也删掉,则设置:
<set name="orders" cascade="all-delete-orphan" inverse="true">
<key column="CUSTOMER_ID" />
<one-to-many class="mypack.Order" />
再运行时就会执行:delete from ORDERS where CUSTOMER_ID=2 and ID=2;
cascade几种取值:
save-update: 级联保存(load以后如果子对象发生了更新,也会级联更新). 但它不会级联删除
delete: 级联删除, 但不具备级联保存和更新
all-delete-orphan: 在解除父子关系时,自动删除不属于父对象的子对象, 也支持级联删除和级联保存更新.
all: 级联删除, 级联更新,但解除父子关系时不会自动删除子对象.
delete-orphan:删除所有和当前对象解除关联关系的对象
none:...
级联保存和级联更新总是集合在一起的, 所以没单独的save 或 updata
我通常会用到none,save-update,all-delete-orphan,而且还是在一对多和多对多的情况
- none就不用说了,在保存,更新,删除当前对象时,忽略其关联的对象
- save-update:在保存和更新当前对象的时候,级联保存,更新关联对象,在多对多的情况下用的很多,而且一般 不用于一对多,一对多我通常会采用none或者all-delete-orphan
- delete 删除当前对象,级联删除关联的对象,我从来单独没用过
- all 也就是save-update+delete,另外对当前对象执行evict和lock时对关联对象也执行evict和lock,我从来没单独用过
- delete-orphan 删除所以和当前对象解除关联的对象,我从来没单独用过
- all-delete-orphan 也就是all+delete-orphan,根据需求,我在一对多中经常使用
关于 all-delete-orphan的更多相关文章
- pt工具之pt-archiver
# tar -zxvf percona-toolkit-2.2.17.tar.gz# yum -y install perl perl-IO-Socket-SSL perl-DBD-MySQL per ...
- 如何区别数据库删除语句drop与delete与truncate?
1.delete:删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行) 删除某一行:delete from 数据表名称 where 列名称=值: 删除所有行:delete*fro ...
- 数据库设计中的Soft Delete模式
最近几天有点忙,所以我们今天来一篇短的,简单地介绍一下数据库设计中的一种模式——Soft Delete. 可以说,该模式毁誉参半,甚至有非常多的人认为该模式是一个Anti-Pattern.因此在本篇文 ...
- 关于JavaScript中的delete操作
关于JavaScript中的delete操作 看到一道题,是这样的: (function(x){ delete x; return x; })(1); 1 null undefined Error 我 ...
- Git异常:Cannot delete the branch 'test1' which you are currently on
GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...
- HTTP Method详细解读(`GET` `HEAD` `POST` `OPTIONS` `PUT` `DELETE` `TRACE` `CONNECT`)
前言 HTTP Method的历史: HTTP 0.9 这个版本只有GET方法 HTTP 1.0 这个版本有GET HEAD POST这三个方法 HTTP 1.1 这个版本是当前版本,包含GET HE ...
- IIS7.5上的REST服务的Put,Delete操作发生HTTP Error 405.0 - Method Not Allowed 解决方法
WebDAV 是超文本传输协议 (HTTP) 的一组扩展,为 Internet 上计算机之间的编辑和文件管理提供了标准.利用这个协议用户可以通过Web进行远程的基本文件操作,如拷贝.移动.删除等.在I ...
- ASP.NET Core 中文文档 第二章 指南(4.10)检查自动生成的Detail方法和Delete方法
原文 Examining the Details and Delete methods 作者 Rick Anderson 翻译 谢炀(Kiler) 校对 许登洋(Seay).姚阿勇(Mr.Yao) 打 ...
- new/delete重载
在c++中,有时我们需要在运行阶段为一个变量分配未命名的内存,并使用指针来访问它,这里就可以用到new关键字.另外需要指出的是,new分配的内存块通常与常规变量分配的内存块不同,常规变量的值都储存在被 ...
- EC笔记:第三部分:16成对使用new和delete
我们都知道,申请的资源,使用完毕后要释放.但是这个释放动作,一定要注意. 举个例子,很多人动态分配的资源,在使用之后,往往直接调用了delete,而不管申请资源的时候用的是new还是new[]. 如下 ...
随机推荐
- ionic 项目分享【转】
写在文章前:由于最近研究ionic框架,深感这块的Demo寥寥可数,而大家又都藏私,堂堂天朝,何时才有百家争鸣之象,开源精神吾辈当仁不让! 由于昨晚找资料太匆匆 忘记出处了,记得是在http://bb ...
- ubuntu 之旅 —— eclipse没有菜单栏
1. 新建一个eclipse.sh文件,加入如下内容,下面的路径是elcipse的路径 export UBUNTU_MENUPROXY=0 /home/wangdeshui/eclipse/eclip ...
- 【原创】win7同局域网下共享文件
本文章用于解决win7局域网共享文件问题: 首先保证两台机器可以ping通: 检测方法: win+R输入cmd打开命令行,输入ping 对方主机ip 不知对方ip可以在在命令行中输入ipconfig ...
- web版扫雷小游戏(四)
~~~接上篇,游戏的主体框架完成了,接下来我们对游戏中存在的两个主要实体进行分析,一个是雷点类BombObject(节点对象),一个是节点对象对应的图片对象BombImgObject,根据第一篇的介绍 ...
- c#配置文件appStrings配置节的读取、添加和修改
程序开发中经常会用到应用程序配置文件,好处就是维护人员可以直接修改配置文件进行维护,而不用修改程序.好,切入主题. 给项目添加应用程序配置文件App.config,先在里面写几句: <?xml ...
- node.Js学习-- 创建服务器简要步骤
1.创建项目目录 mkdir ningha(文件夹名)npm init 初始化项目 获得package.json 2..在node.Js命令行操作进入到文件所在目录 3.输入browser-sync ...
- 11-17的学习总结(DOMfirstday)
HTML: 超文本标记语言,专门定义网页内容的语言 XHTML: 严格的HTML标准 DHTML: 所有实现网页动态效果技术的统称 XML: 可扩展的标记语言,标签都是自定义的 XML语法和HTML语 ...
- adb找不到设备
提示信息如下所示: adb server is out of date.killing... adb server didn't ACK *failed to start daemon * error ...
- python 连 mongodb
这几天在学习Python Web开发,于是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样的好玩意儿,何必还自己造车呢?决定使用Tornado这个框架,然后数据库方面决定顺便 ...
- Linux运维需要掌握的技能 (转)
本人是linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具.我就大概列出这几方面,这样入门就基本没问题了 ...