级联删除
最近正忙于
s2sh
项目的后台功能的实现,后台功能已基本实现,今天周末,闲来无事,给大家晒晒我写的级联删除,在写之前就被这四个字吓到了,还以为有多难,实现之后才知道也不过如此,也许还有更难的级联删除操作,不过暂时我还没有遇到
.
我喜欢用实例来阐述,这样说的明白,又容易理解。以订单为例我们来实现级联删除,首先我们先分析一下各个表之间的关系。、
Orders(
订单表
)
的字段如下:
payments,employees,customers,number,rdate,sum,sendmode,status,orderdetails
订单表中包含订单的支付方式
(payments)
,管理订单的员工
(employees)
,下订单的客户
(customers)
以及与与订单关联的订单明细表
(orderdetails)
。其中订单与订单明细表之间是
1
:
n
的关联关系。
分析实现后的结果:
若要删除一个订单,则与之关联的订单明细表需要删除。
首先在
domain
中生成各个字段的
set(),get()
方法,以及无参的构造方法,带参数的构造方法。
Domain
中代码如下:
public class Orders implements java.io.Serializable {
/**
* @author DXL_xiaoli
*/
private static final long serialVersionUID = 1L;
//递增序列
private Integer id;
//支付方式
private Payments payments;
//员工
private Employees employees;
//客户
private Customers customers;
//订单编号
private String number;
//订单日期
private Date rdate;
//订单金额
private Double sum;
//送货方式
private String sendmode;
//订单状态
private String status;
private Set<Orderdetails> orderdetailses = new HashSet<Orderdetails>(0);
//生成set(),get(),public Orders(),public Orders(….)方法
}
当我们点击删除时需要将其所对应的
id
传到
action
中并通过其配置文件找到
action
中的
delet()
方法,
action
中的代码如下:
public class OrdersAction extends ActionSupport {
/**
* @author DXL_xiaoli
*/
private static final long serialVersionUID = 1L;
private OrdersServiceImpl ordersServiceImpl;
private Orders entity;
//构造器注入
public void setOrdersServiceImpl(OrdersServiceImpl ordersServiceImpl) {
this.ordersServiceImpl = ordersServiceImpl;
}
public Orders getEntity() {
return entity;
}
public void setEntity(Orders entity) {
this.entity = entity;
}
//删除方法
public String delete() {
ordersServiceImpl.delete(entity.getId());
return "delete";
}
}
执行到这里不难发现代码量极其简洁,下面将要到
service
层中执行删除
service
层代码如下:
public class OrdersServiceImpl implements OrdersService{
private OrdersDaoImpl ordersDaoImpl;
public void setOrdersDaoImpl(OrdersDaoImpl ordersDaoImpl) {
this.ordersDaoImpl = ordersDaoImpl;
}
public void delete(Integer id) {
ordersDaoImpl.delete(id);
}
}
根据从页面获取的
id
将实体删除,一下就是真正的底层实现类
dao
,
dao
中的方法如下:
public class OrdersDaoImpl extends HibernateDaoSupport implements OrdersDao {
public void delete(Integer id) {
this.delete(findById(id));
}
public Orders findById(Integer id) {
return (Orders) this.getHibernateTemplate().get(Orders.class, id);
}
//级联删除实现
public void delete(Orders entity) {
Set<Orderdetails> orderdetails = entity.getOrderdetailses();
if (orderdetails == null) {
} else {
for (Orderdetails orderdetail : orderdetails) {
this.getHibernateTemplate().delete(orderdetail);
}
}
this.getHibernateTemplate().delete(entity);
}
}
以上代码中执行的方法先后是:先执行
delete(Integer id)
再执行
findById(Integer id)
方法,最后执行
delete(Orders entity)
方法。意思是先根据从页面获取来的
id
将所要删除的实体查询出来,然后再根据
id
将其所对应的实体删除。
由于订单表与订单明细表有所关联,所以在删除订单表时先将其所对应的订单明细表删除。一个订单对应多个订单明细表,所以用
for
循环将所有的订单明细表循环出来,再将其删除,最后将订单删除。
以上便是简单的级联删除,只涉及到两个表的级联。
分享到:
相关推荐
《SH367309级联保护模式详解》 本文将详细解析SH367309级联保护模式的原理、参数配置及其在实际应用中的注意事项,以帮助理解和运用这一技术。 SH367309级联保护模式主要用于锂离子电池组的保护,确保电池在充放电...
本文档主要介绍了一种名为SH367309的锂电池保护板的级联采集模式,适用于电动车电池、动力电池和三元锂离子电池等应用场景。该保护板具有丰富的可配置参数,以确保电池的安全性和效率。 一、保护参数与功能 SH...
【S2SH整合考勤小系统】是一款基于Struts2、Spring和Hibernate三大主流Java EE框架集成开发的简单考勤管理系统。这个系统旨在帮助初学者理解如何在实际项目中运用这些技术,特别是针对数据处理和查询的需求。在这个...
【标题】:“qt实现sqlite3级联删除demo” 在数据库管理中,级联删除是一种常见的功能,它允许在删除一个表中的记录时,自动删除与之相关联的其他表中的记录。在Qt环境下,结合SQLite3数据库,我们可以实现这一功能...
### SQL Server 创建触发器实现级联删除 在数据库管理中,触发器是一种特殊类型的存储过程,它被设计为响应特定的事件(如插入、更新或删除数据)而自动执行。本文将详细介绍如何在 SQL Server 中创建一个触发器来...
根据给定文件的信息,本文将围绕“用JDBC实现数据库的级联删除与更新”这一主题进行深入探讨,包括理解需求、设计思路、具体实现步骤以及相关代码示例。 ### 1. 需求理解 #### 1.1 业务场景 在本案例中,存在两个...
本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、级联更新和级联删除。 一、Many-to-Many关系基础 在数据库设计中,Many-to-Many关系意味着两个实体之间存在多对多的关系。例如,学生可以选修多门...
级联删除和级联更新是数据库管理中非常重要的概念,特别是在多表关联的情况下,能够确保数据的一致性和完整性。本文将详细介绍如何在SQL Server中实现级联更新和级联删除,包括通过触发器的方式和使用外键约束的方式...
在数据库管理中,级联删除是一种常见的操作,它涉及到一个表中的记录被删除时,与之关联的其他表中的记录也会自动被删除。在大型数据库系统中,这种功能通常通过外键约束来实现,但在某些情况下,如需要自定义删除...
然而,自关联表的级联删除并不像简单的外键级联删除那样直接,因为它涉及到了递归关系。 在上述标题和描述中提到的MS Server自关联表的级联删除,主要通过触发器来实现。触发器是一种特殊的存储过程,它会在特定的...
### MySQL级联更新与级联删除详解 在数据库设计中,外键约束是维护数据完整性和一致性的重要手段之一。MySQL的InnoDB存储引擎支持多种不同的处理外键的方式,包括级联更新(Cascade Update)和级联删除(Cascade ...
"SH367309 CV1.0A.PDF" SH367309是一款5-16串锂电池BMS用前端芯片,具有硬件保护功能、内置平衡开关、禁用低压电芯充电功能、 小电流检测功能、支持乱序上下电、内置看门狗模块等特点。该芯片适用于总电压不超过70V...
"MySQL 中利用外键实现级联删除、更新" 在 MySQL 中,外键是指在一个表中的一列或多列,引用另一个表中的主键或唯一索引。外键可以强制实施数据的一致性和完整性,使得数据更加可靠。外键在 MySQL 中的实现主要是...
【s2sh考勤管理小系统】是一款专为IT初学者设计的项目,它结合了Struts2、Spring和Hibernate...通过学习和实践这个项目,开发者不仅可以掌握s2sh框架的整合应用,还能了解到模糊查询、数据库设计、分页处理等关键技能。
级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单...
在IT领域,级联失效(Cascading Failure)是一种复杂的现象,特别是在网络系统中,如电力网格、互联网或通信网络。当一个组件故障时,它可能导致其他相关组件相继失效,从而引发大规模的系统崩溃。MATLAB作为一种...
Oracle数据库中的级联查询、级联删除和级联更新是数据库设计中常用的操作,它们用于在多表关联的关系型数据库中实现数据的联动处理。在Oracle中,这些操作主要涉及外键约束和触发器。 首先,级联查询是通过自连接来...
级联菜单 动态级联菜单 级联菜单是一种常见的Web应用程序用户界面元素,它允许用户从多个选项中选择一个或多个项目。动态级联菜单是指可以根据实际情况动态生成选项的级联菜单。下面将对该技术进行详细的解释。 ...
在Oracle数据库中,多表级联删除是一种常见的需求,特别是在数据关系复杂的环境中。级联删除允许在删除一个表中的记录时,自动删除依赖于该记录的其他表中的相关记录。以下将详细介绍三种在Oracle中实现多表级联删除...
级联字典是一种在计算机科学和信号处理领域中常见的数据结构,特别是在图像处理、压缩编码和机器学习等应用中。这种字典构造方法是通过组合多个基础字典,以达到更丰富的表示能力和更高的编码效率。在本文中,我们将...