Hibernate入门(九)级联删除
Hibernate级联删除
上一篇文章学习了级联保存和更新,这个级联删除应该很好理解的。一样的道理,删除一方,同时删除有关联的一方。
https://www.cnblogs.com/deepSleeping/p/9978296.html
同样有方向性。
删除客户,客户下的订单也同样删除。
用户表:

订单表:

业务:删除id值为1的客户,想要的效果:同时删除id值为1的客户下的所有订单
1.配置customer.hbm.xml文件(cascade = "delete")
<!-- 配置一对多属性 -->
<set name="ods" cascade="delete">
<key column="cust_order_id" ></key>
<one-to-many class="Order"/>
</set>
2.java测试类
/**
* 删除id值为1的用户,级联删除该用户下的订单
*/
@Test
public void fun(){
Session session = HibernateUtils.getSession();
session.getTransaction().begin(); try {
//获取id值为1的用户 持久态
Customer cst = session.get(Customer.class, 1); session.delete(cst);
} catch (Exception e) {
session.getTransaction().rollback();
// TODO Auto-generated catch block
e.printStackTrace();
} session.getTransaction().commit();
}


生成的SQL语句
Hibernate:
select
customer0_.cust_id as cust_id1_0_0_,
customer0_.cust_name as cust_nam2_0_0_,
customer0_.cust_gender as cust_gen3_0_0_,
customer0_.cust_age as cust_age4_0_0_,
customer0_.cust_phone as cust_pho5_0_0_
from
customera customer0_
where
customer0_.cust_id=?
Hibernate:
select
ods0_.cust_order_id as cust_ord3_1_0_,
ods0_.order_id as order_id1_1_0_,
ods0_.order_id as order_id1_1_1_,
ods0_.detail_id as detail_i2_1_1_,
ods0_.cust_order_id as cust_ord3_1_1_
from
ordersa ods0_
where
ods0_.cust_order_id=?
Hibernate:
update
ordersa
set
cust_order_id=null
where
cust_order_id=?
Hibernate:
delete
from
ordersa
where
order_id=?
Hibernate:
delete
from
ordersa
where
order_id=?
Hibernate:
delete
from
customera
where
cust_id=?
很明显,删除了id为1的客户同时,删除了该客户下的订单
然后翻转方向,删除订单,同时删除有这个订单的所有客户(虽然应该不会有这种奇怪的需求把....hah )
一样的配置和java代码编写后同样是测试成功了。
提示:最好在测试第二个之前,要把customer.hbm.xml配置中的级联删除的属性去掉,不然订单删除,然后删除级联的客户,客户删除后,又级联删除该客户下的订单,如此反复,估计表里的数据也差不多没了吧。。。。
Hibernate入门(九)级联删除的更多相关文章
- 谈论Hibernate级联删除——JPA根据Hibernate实现许多级联删除CascadeType.DELETE_ORPHAN
声明: 1.这篇文章是原创.非复制或转载过来. 2.在本文中,参数都亲自做过实验证明. 3.这篇文章谈到了Hibernate配置基于注释的方法.hbm语法不可用. 不清JPA.Hibernate.EJ ...
- Hibernate入门(八)级联保存或更新(含问题在末尾,求大佬指点..)
级联保存或更新CASCADE 级联保存或更新: 作用就是:保存一方的数据的时候,会把关联的对象也同时保存. 级联保存或更新的配置: 属性名:cascade 属性值: 1.none:所有情况下均不进行关 ...
- Hibernate下的Many-to-Many的级联删除
hibernate下的Many-to-Many的级联删除 Hibernate多对多的例子不少,但仔细一看,大多数都是保存的,删除谈的少,但问题还不少,因此有必须简单测试一下,以下我们来个简单的多对多关 ...
- Hibernate学习笔记(一):级联删除
一对多的关系映射 在一的一方配置文件中将会配置set节点信息: *.hbm.xml配置文件中set节点的属性: Lazy:默认是true 即使用延迟加载,false表示即时加载: Order-by:一 ...
- 再谈Hibernate级联删除——JPA下的Hibernate实现一对多级联删除CascadeType.DELETE_ORPHAN
声明: 1.本文系原创,非抄袭或转载过来的. 2.本文论点都亲手做过实验论证. 3.本文所讲的Hibernate配置都基于注解的方式,hbm语法未提供. 非常多人对持久层概念搞不清JPA.Hibern ...
- Hibernate中表与表之间的关联多对多,级联保存,级联删除
第一步:创建两个实体类:用户和角色实体类,多对多关系,并让两个实体类之间互相关联: 用户实体类: package com.yinfu.entity; import java.util.HashSet; ...
- Hibernate中表与表之间的关联一对多,级联保存和级联删除
1:Hibernate的一对多操作(重点) 一对多映射配置 第一步:创建两个实体类:客户和联系人(例)以客户为一,联系人为多: package com.yinfu.entity; public cla ...
- hibernate 级联删除报更新失败的问题(org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update)
首先hibernate级联删除的前提是,首先需要在映射文件中配置,配置多表之间的关联关系: 下面以部门表(Dept)和员工表(Emp)为例: 1.在Emp.hbm.xml映射文件中配置many-to- ...
- Hibernate一对多关联映射的配置及其级联删除问题
首先举一个简单的一对多双向关联的配置: 一的一端:QuestionType类 package com.exam.entity; import java.util.Set; public class Q ...
随机推荐
- TDD:什么是桩(stub)和模拟(mock)?
背景 本文假设你对TDD.Stub和Mock已经有了初步的认识,本文简单解释一下stub和mock的区别和使用场景,先看看他们之间的关系: 由上图可以知道mock框架可以非常容易的开发stub和moc ...
- 我的书单(Book List)
code[class*="language-"], pre[class*="language-"] { background-color: #fdfdfd; - ...
- 【安全开发】浅谈JSP安全开发之XSS
前言 大家好,好男人就是我,我就是好男人,我就是-0nise.在各大漏洞举报平台,我们时常会看到XSS漏洞.那么问题来了,为何会出现这种漏洞?出现这种漏洞应该怎么修复?目录 1.XSS ...
- 14.不同条目的listview
分类界面 整个项目的逻辑就是这样的 CategoryInfo public class CategoryInfo { private String title; private String url ...
- Kali学习笔记29:默认安装漏洞
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 默认安装漏洞: 早期Windows默认自动开启很多服务 ...
- 原生JS-旋转木马
原生JS-旋转木马 今天写一个原生JS写的旋转木马JS效果. 实现原理: 1.建立一个数组给每一张图片写对应的z-index,opacity,top,width: 2.实现旋转的操作是把建造的数组里面 ...
- OAuth2简易实战(二)-模拟客户端调用
1. OAuth2简易实战(二) 1.1. 目标 模拟客户端获取第三方授权,并调用第三方接口 1.2. 代码 1.2.1. 核心流程 逻辑就是从数据库读取用户信息,封装成UserDetails对象,该 ...
- Mac OS Sierra如何打开任何来源
我们知道在Mac升级到最新的Mac OS Sierra系统之后,随之而来的是第三方应用都无法打开,提示的是无法打开或扔进废纸篓.而在之前的版本系统中,我们知道在系统偏好设置-->安全性与隐私-- ...
- Xamarin.Android 解决打开软键盘导致底部菜单上移问题
在界面布局中有EditText控件,该控件一旦获取焦点则打开软键盘,如果布局中有底部菜单,那么底部菜单可能会被软键盘顶在其上面,看如下效果: 解决方法:在活动绑定界面之前写上下段代码即可 Window ...
- 一道关于:ArrayList、Vector、LinkedList的存储性能和特性 的面试题
ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢 ...