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配置中的级联删除的属性去掉,不然订单删除,然后删除级联的客户,客户删除后,又级联删除该客户下的订单,如此反复,估计表里的数据也差不多没了吧。。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~