当关联双方存在父子关系,就可以在 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,而且还是在一对多和多对多的情况

  1. none就不用说了,在保存,更新,删除当前对象时,忽略其关联的对象
  2. save-update:在保存和更新当前对象的时候,级联保存,更新关联对象,在多对多的情况下用的很多,而且一般    不用于一对多,一对多我通常会采用none或者all-delete-orphan
  3. delete 删除当前对象,级联删除关联的对象,我从来单独没用过
  4. all 也就是save-update+delete,另外对当前对象执行evict和lock时对关联对象也执行evict和lock,我从来没单独用过
  5. delete-orphan 删除所以和当前对象解除关联的对象,我从来没单独用过
  6. all-delete-orphan 也就是all+delete-orphan,根据需求,我在一对多中经常使用

关于 all-delete-orphan的更多相关文章

  1. pt工具之pt-archiver

    # tar -zxvf percona-toolkit-2.2.17.tar.gz# yum -y install perl perl-IO-Socket-SSL perl-DBD-MySQL per ...

  2. 如何区别数据库删除语句drop与delete与truncate?

    1.delete:删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行) 删除某一行:delete from 数据表名称 where 列名称=值: 删除所有行:delete*fro ...

  3. 数据库设计中的Soft Delete模式

    最近几天有点忙,所以我们今天来一篇短的,简单地介绍一下数据库设计中的一种模式——Soft Delete. 可以说,该模式毁誉参半,甚至有非常多的人认为该模式是一个Anti-Pattern.因此在本篇文 ...

  4. 关于JavaScript中的delete操作

    关于JavaScript中的delete操作 看到一道题,是这样的: (function(x){ delete x; return x; })(1); 1 null undefined Error 我 ...

  5. Git异常:Cannot delete the branch 'test1' which you are currently on

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...

  6. 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 ...

  7. IIS7.5上的REST服务的Put,Delete操作发生HTTP Error 405.0 - Method Not Allowed 解决方法

    WebDAV 是超文本传输协议 (HTTP) 的一组扩展,为 Internet 上计算机之间的编辑和文件管理提供了标准.利用这个协议用户可以通过Web进行远程的基本文件操作,如拷贝.移动.删除等.在I ...

  8. ASP.NET Core 中文文档 第二章 指南(4.10)检查自动生成的Detail方法和Delete方法

    原文 Examining the Details and Delete methods 作者 Rick Anderson 翻译 谢炀(Kiler) 校对 许登洋(Seay).姚阿勇(Mr.Yao) 打 ...

  9. new/delete重载

    在c++中,有时我们需要在运行阶段为一个变量分配未命名的内存,并使用指针来访问它,这里就可以用到new关键字.另外需要指出的是,new分配的内存块通常与常规变量分配的内存块不同,常规变量的值都储存在被 ...

  10. EC笔记:第三部分:16成对使用new和delete

    我们都知道,申请的资源,使用完毕后要释放.但是这个释放动作,一定要注意. 举个例子,很多人动态分配的资源,在使用之后,往往直接调用了delete,而不管申请资源的时候用的是new还是new[]. 如下 ...

随机推荐

  1. Java-struts2 配置hellow world

    这里进行struts框架的配置问题,和简单的输出hellow world 配置的步骤 1.      配置TomCat 2.      Jak 3.      拷贝struts.xml文件到src目录 ...

  2. PHP 时间函数集合

    计算指定日期的前几天,几个月或者几年的函数 $a = '2014/08/21';echo date( "Y-m-d", strtotime( "-6 month  &qu ...

  3. C#设置与获取目录权限(.net控制ACL)

    找到两种方式可以修改文件夹的权限 第一种: 想用c#来设置和读取ntfs分区上的目录权限,找了很多资料,未果.终于发现了一段vb.net的代码,做了修改,以C#展示给大家. using System; ...

  4. [字符串] AppMessage--字符串返回帮助类 (转载)

    点击下载 AppMessage.rar 这个类是关于AppMessage的帮助类,主要是格式化返回字符串的里面会有很多的提供字符的格式以及预设置内容,大家可以直接使用的看下面代码吧 /// <s ...

  5. 数据库性能高校:CPU使用过高(下)

    CPU使用率过高的常见原因 查询优化器会尽量从CPU,IO和内存资源成本最小的角度,找到最高效的数据访问方式.如果没有正确的索引,或者写的语句本身就会忽略索引, 又或者不准确的统计信息等情况下,查询计 ...

  6. jquery 单引号和双引号的区别及使用注意

    在js中单引号和双引号都是一样的,平时使用的时候尽量用单引号,只有碰到嵌套的时候才会同时用两种引号,感兴趣的朋友可以了解下: 可以执行的语法:$("ul li a").filter ...

  7. iOS UITableviewWrapperView 和 automaticallyAdjustsScrollViewInsets属性

    关于在navigationController下面使用tableView在竖直方向会遇到frame的y值的困惑, 会遇到视图控制器的这个属性:automaticallyAdjustsScrollVie ...

  8. power shell upload file to azure storage

    # Azure subscription-specific variables. $storageAccountName = "storage-account-name" $con ...

  9. VS番茄助手安装(vs2015+vs2010):卸载之前的vs助手再安装新版本

    1 卸载之前的vs助手 vs2010: vs2015: 2 安装新版本

  10. ThinkPHP调试模式与日志记录

    1.可以在config.php中进行设置,默认为关闭状态. 'APP_DEBUG'   =>  true 打开\ThinkPHP\Common\debug.php文件可以查看debug的默认设置 ...