Hibernate 多对多 删除操作(many-to-many)续

hibernate many-to-many级联保存,级联更新,级联删除 立即下载

Hibernate 多对多 删除操作(many-to-many)续

 

先往数据库里插入一些记录: public void testSave() { Session session = HibernateSessionFactory.getSession(); session.beginTransaction(); // create course Course c1 = new Course(); Course c2 = new Course(); c1.setName("C"); c2.setName("Java"); // create teacher Teacher t1 = new Teacher(); Teacher t2 = new Teacher(); t1.setName("Leo"); t2.setName("Rose"); // create relationship c1.getTeachers().add(t1); c1.getTeachers().add(t2); t1.getCourses().add(c1); t2.getCourses().add(c1); /* 因为主控方级联设置为save-update,如果设置为none,则下面被注释的代码需要开启,否则会报错 */ //session.save(t1); //session.save(t2); session.save(c1); session.getTransaction().commit(); session.close(); } 下面是测试的一些结果: 1. 如果cascade不管主控方设置还是被控方设置成 all, delete等与delete级联删除有关即可,两端以及中间表的记录都会被删除,通常这样的需要是很少的,因此,如果你要这样的情况,只要简单设置成all, delete就可以轻松的将关系以及两端的记录删除的干干净净。 2. 只想删除某一端的记录以及中间的表的关联信息。 这种需求通常是很常见的。这个时候cascade的设置是除与delete有关的任何级联约束。以下是删除心得: 如果删除的是主控方,只需要简单的删除这条记录,级联关系以及主控方的记录同时删除,但被控方的记录仍然存在。因此只对主控方的多对多删除是最简单,直接的。代码如下: /** * 多对多 主控方删除(可以删除中间表记录) */ public void testDelete() { String id = "402881ee175f04be01175f04c05d0001"; Session session = HibernateSessionFactory.getSession(); session.beginTransaction(); Course c1 = (Course) session.get(Course.class, id); session.delete(c1); session.getTransaction().commit(); session.close(); } 如果你这个时候想直接删除被控方,那么很遗憾的告诉你,你只做到了一半,你只是简单的把被控方的记录删除了,关联关系仍然存在中间表里,系统随时会因为你的关联访问报错,代码如下: /** * 多对多 被控方删除(无法删除中间表记录) */ public void testDeleteByInverse() { String id = "402881ee175a2e7c01175a2e7ead0003"; Session session = HibernateSessionFactory.getSession(); session.beginTransaction(); Teacher t1 = (Teacher) session.get(Teacher.class, id); session.delete(t1); session.getTransaction().commit(); session.close(); } 如果想既想删除被控方,双想删除关联,请看下面代码: /** * 多对多 被控方删除(可以删除中间表记录) */ public void testDeleteByInverse2() { String id = "402881ee175f04be01175f04c06c0002"; Session session = HibernateSessionFactory.getSession(); session.beginTransaction(); Teacher t1 = (Teacher) session.get(Teacher.class, id); Set cs = t1.getCourses(); for (Course c : cs) { c.getTeachers().remove(t1); } session.delete(t1); session.getTransaction().commit(); session.close(); } 完成了。 但如果是Spring+Hiberante下多对多删除,可能会报一个错误,目前的解决办法是把两端的cascade都设置成none. 初步断定可能与事务有关,如果有人遇到了,并知道为什么,希望能留言,先谢谢大家了。 注:三个表的表结构 1. tbl_course.sql create table "SCOTT"."TBL_COURSE"( "ID" VARCHAR2(80) not null, "NAME" VARCHAR2(20) not null, constraint "SYS_C005315" primary key ("ID") ); create unique index "SCOTT"."SYS_C005315" on "SCOTT"."TBL_COURSE"("ID"); 2. tbl_teacher.sql create table "SCOTT"."TBL_TEACHER"( "ID" VARCHAR2(80) not null, "NAME" VARCHAR2(20) not null, constraint "SYS_C005313" primary key ("ID") ); create unique index "SCOTT"."SYS_C005313" on "SCOTT"."TBL_TEACHER"("ID"); 3.tbl_teacher_course.sql create table "SCOTT"."TBL_TEACHER_COURSE"( "FK_TEACHER_ID" VARCHAR2(80), "FK_COURSE_ID" VARCHAR2(90) ); (责任编辑:志伟) 转载请注明文章来源于志伟教程资料网 (http://www.zhiweinet.com)。

高熵合金AlCoCrFeNi/金刚石摩擦案例代码 本文介绍金刚石与高熵合金AlCoCrFeNi摩擦的案例。 在之前的文章中,介绍过使用fix indent命令实现虚拟球的摩擦,本文介绍使用金刚石实体球实现高熵合金摩擦的方法。 主要的模拟过程如下: (1)基体建模 建使用原子替换法获得高熵合金初始模型,升温到3000K驰豫后,冷却至300K,获得平衡组织。 (2)摩擦球建模 在高熵合金平衡组织的模型中添加金刚石摩擦球,使用change_box命令扩大box尺寸,添加金刚石摩擦球,并设置混合力场。 (3)摩擦过程 摩擦球下压一定深度后,沿y方向进行摩擦,摩擦 阅读详情

相关推荐

最新首发——boss直聘爬虫

本文介绍了使用Python开发Boss直聘爬虫的核心思路和技术要点。通过模拟浏览器访问搜索页面获取Cookie,然后构建API请求获取职位数据。关键步骤包括:1)使用DrissionPage库初始化浏览器;2)模拟用户浏览行为获取必要参数;3)设置完整的请求头信息;4)通过POST请求获取JSON格式的职位数据。文章提供了详细的代码实现,包括浏览器模拟、API请求构建、数据处理等核心功能模块,并强调了最新版接口改为POST访问的特点。该爬虫可自动翻页采集数据并保存为Excel文件,适用于安全实习等职位信息的

2301_79735033的博客 3324

@ManyToMany 联级删除

fetch = FetchType.EAGER 及时加载 联级删除必须加上  nullable = false, updatable = false  例如: @ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER) @JoinTable(name = "user__reference_role",  joinCol...

weixir123的博客 311

视觉SLAM的前段后端最详细的梳理(硕士入门知识框架更新)

文章目录视觉SLAM的组成结构视觉里程计(VO)-特征点法 -构建稀疏点云地图-直接法 -构建稠密或半稠密的地图 --需要使用 RGB-D 传感器视觉里程计--总结:SLAM 后端研究滤波器法非线性优化后端方式的差异(有五种优化方式):单目视觉里程计的初始化:运动估计:半直接法运动估计的优化方案:关于解决累计误差的一些方法:关键帧的建图及后端优化:特征的深度估计:图优化的后端研究:视觉与IMU融合的分类:视觉与IMU的融合的优势:存在的问题:优秀的开源: 视觉SLAM的组成结构 视觉里程计(VO) -特

DC 6812

Hibernate ManytoMany 标注级联增删改查完整操作

我们在用户和角色的概念上经常要用到多对多关系本文综合全部情况统一进行说明 实现了的操作: - 保存新增User用户的时候保存新的Role - 新增User用户绑定已有Role后保存关系 - 删除用户时删除跟角色的对应关系 - 只有角色没有对应任何用户的时候才能删除角色   1. 类注解 User类 @ManyToMany(cascade={CascadeType.MERGE})

colourrain的专栏 2199

HDMI与DisplayPort混搭方案:如何用Xilinx Video PHY Controller实现多协议视频接口转换

本文详细解析了如何利用Xilinx Video PHY Controller IP核实现HDMI与DisplayPort协议转换,涵盖混合视频接口架构设计、GT收发器动态重配置策略及跨协议时钟域处理方案。通过实战案例和配置技巧,帮助开发者构建高性能多协议视频转换系统,适用于医疗影像、工业控制等场景。

weixin_30776273的博客 447

CocosCreator | 自定义启动页之H5

01 效果对比 默认启动页: 自定义启动页: 02 启动页存在的意义 我们在 creator 中的开发的游戏都是基于 cocos engine,所以在展示我们的游戏之前,是必须要先加载 cocos engine,然后才是我们自己的业务代码 流程图如下: 而构建完成后未精简的 cocos engine 代码为 1.9M 如果再加上物理相关代码的话,一共是2M 别忘了,我们自己的首场景也要加载过程哦 所以,从游戏启动,到真...

Valiancer 5899

jpa 中@ManyToMany 标签使用后,只对关联表进行删除的写法

1. 表单结构 : 一个角色表TRole 一个菜单表TMenu一个角色-菜单表TRoleMenu 2.通过jpa生成pojo,用到了many2many 注释来表示关联关系后。只会生成2个实体pojo 类。中间关联表不会生成pojo类 [java] view plaincopy package com.alcor.acl.domain;

w2222288的专栏 6487

EWM与SAP ERP的数据集成

1、EWM与 SAPERP的无缝集成-基础数据&业务交易数据 2、SAP ERP设置:连接SAP ERP和EWM必须设置应用程序连接支持-ALE(Application Link Enabling) 3、ERP - EWM仓库数据集成: SAP ERP需要设置配置信息,连接ERP和EWM之间的库存管理应用,基于工厂+库存地点对应一个仓库号来进行配置; 在ERP中需要创建一个中间虚拟仓库,代表ERP仓库;“中间虚拟”仓库创建之后,工厂+库存地点的信息...

weixin_43899798的博客 3797

db2删除大量数据_SQL 基础知识- 数据库与 SQL

目录What's 数据库数据库结构SQL 概要创建数据库与表删除和更新表一、What's 数据库  1.数据库(Database,DB):将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。如:大型-银行存储的信息,小型-电话簿。  2.数据库管理系统(Batabase Management System,DBMS):用来管理数据库的计算机系统。  3.关系型数据库(Relatio...

weixin_39809793的博客 1358

一张图读懂 SAP S/4HANA Cloud 与 SAP BTP 的扩展版图

本文解析了SAP S/4HANA Cloud的扩展技术谱系,提出扩展应分为on-stack(系统内)和side-by-side(并行)两种路径,并沿着低代码到专业代码的能力梯度进行分层。on-stack扩展包括面向业务人员的Key User Extensibility和面向开发者的Developer Extensibility,强调贴近核心业务对象;side-by-side扩展则依托SAP BTP平台,提供SAP Build低代码工具、CAP开发框架和ABAP云环境三种方案,支持解耦创新。文章通过五个真实案

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 255

太空安全卫士:基于YOLOv5的空间态势感知系统(实现轨道碰撞预警与太空环境保护)

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护宇宙安全”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了航天监测的哪些痛点、YOLOv5在太空目标检测中的性能优势、系统未来能怎么优化(比如对接航天监测网络、实现实时轨道预测)。未来,这个系统还能往“更智能”的方向发展:比如结合轨道计算预测碰撞风险、开发移动端APP让天文爱好者参与太空垃圾上报、在航天任务中实现全自动避障决策……想象空间很大。

m0_71589036的博客 90

Django学习笔记(4)---ManyToMany 添加、删除关联、查询

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34109408的博客 907

海康视觉算法平台VisionMaster 4.3.0 C# 二次开发01 加载方案并获取结果

第一次使用海康视觉算法平台VisionMaster 4.3.0,项目中要使用这个平台进行视觉处理并获取结果。

StevenChen的博客 7878

【SSH商城】--- Hibernate 的many-to-one;one-to-many;many-to-many

虽然我已经敲过SSH了,可是感觉还是心里面空空的,这不,前两天就有几个同学问我给他们挑错,结果就没有调出来,丢脸啊,所以就捡着零碎时间,好好的总结一下把,就当是给以后面试做准备了!      开始咱们的主题: 1、many-to-one:      描述多对一的一种数据模型,它指定many一方是不能独立存在的。通过many- to - one 的标签,我们可以定义一种多对一的联系

My Devil's Cry 1371

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

hibernate集合映射,one-to-many,删除集合成员

1、one方映射文件  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">     Mapping file autogenerated by MyEclipse Persistence Tools -->

joyyq的专栏 2658

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Hibernate的注解many-to-one

Hibernate的注解many-to-one   Hibernate 学习应用 項目中一個實例:    最近使用annotation做hibernate映射,有两张表乘客(Passanger)表 和订单(VacationOrder )表,乘客表和订单表是ManyToOne,业务只需要从订单表出发设置不同乘客,根据乘客查看预订的订单,采用双向关联,ManyToOne

jerry191的博客 3903

hibernate的many-to-one的级联删除问题

在数据库中,级联删除,一般是删除主表记录的时候,级联删除子表的记录。 但是在Hibernate中,如果在many-to-one设置了级联all,或者delete,比如student中的many-to-one设置了all, 那么在删除持久化的student的时候,也会级联删除teacher对应的记录。这与数据库的操作不大相同,要注意了!!!

zjlolife的专栏 2994

hibernate映射文件many-to-one元素属性

many-to-one 元素属性: name:映射类属性的名字column:关联的字段class:关联类的名字cascade:设置操作中的级联策略 可选值为 all所有操作情况均进行级联、none所有操作情况均不进行级联、save-update执行save和update操作时级联、delete执行删除操作时级联fetch:设置抓取数据的策略 默认值为select序列选择抓取 可选值为join外连接抓取 update:进行update操作时是否包含此字段insert:进行insert操作时是否包含此字段pro

qwerasdf123的专栏 2万+

Hibernate双向多对多对象关系模型映射

1 双向many-to-many 业务模型: 描述员工和项目 一个员工同时可以参与多个项目 一个项目中可以包含多个员工 分析:数据库的数据模型,通过中间关系表,建立两个one-to-many构成many-to-many create table emp ( eno int primary key auto_increment, ename varchar ); create table project ( pid int primar...

光何 226

Hibernate之many-to-many XML 篇一

Hibernate中many-to-many的使用情况也是非常之多,有单向的 也有双向的,个人在工作之余也去详细的做了个案例来加深体会,正所谓熟能生巧,平常工作中虽然 接触的也比较多,但是 基本上很少去总结,去整理这一些日常工作中常用到的问题。         有关many-to-many数据一般采用的是以中间表的形式来实现,而在业务代码中使用到的配置常用的有两种: 第一、使用无中

漫天雪_昆仑巅 1808

多对一(many-to-one)

通过many-to-one元素,可以定义一种常见的与另一个持久化类的关联。 这种关系模型是多对一关联(实际上是一个对象引用-译注):这个表的一个外键引用目标表的 主键字段。<many-to-one name="propertyName" column="column_name" class="ClassName" casc

ailihx的专栏 8432

关于hibernate多对多----many to many----很实用.

1、到底在哪用cascade="..."?    cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或删除对像时更方便一些,只要在cascade的源头上插入或是删除,所有cascade的关系就会被自己动的插入或是删除。便是为了能正确的cascade,unsaved-value是个很重要的属性。Hibernate通过这个属性来判断一个对象应该save还是update,如果这个对象的

融化的冰 2294

Hibernate下的Many-to-Many的级联删除

hibernate下的Many-to-Many的级联删除 Hibernate多对多的例子不少,但仔细一看,大多数都是保存的,删除谈的少,但问题还不少,因此有必须简单测试一下,以下我们来个简单的多对多关系建立 老师Teacher 与 课程Course 是一个多对多的关系,Pojo与XMl配置如下。 1 /** 2 * Course Entity 3 * see table...

weixin_33716941的博客 199

正确理解hibernate的inverse! many-to-many

Inverse是hibernate双向关系中的基本概念,当然对于多数实体,我们并不需要双向关联,更多的可能会选择单向关联,况且我们大多数人一般采用一对多关系,而一对多双向关联的另一端:多对一的inverse属性是不存在,其实它默认就是inverse=false.从而防止了在一对多端胡乱设置inverse也不至于出错。但是inverse设置不当确实会带来很大的性能影响,这点是我们必须关注的。这篇

550

hibernate many-to-many

<br />只删除中间表,可以通过以下代码。 <br /><br />/** <br />* 多对多 通过主控方删除中间表(其余记录都不变) <br />*/ <br />public void testDeleteByInverse3() { <br />String id = "402881ee1782dad9011782dadb310001"; <br />Session session = HibernateSessionFactory.getSession(); <br />session.beg

wyfh2010的专栏 982

Hibernate_day01

Hibernate学习 1.设置多对多关系,表示用户选择多个角色。 private Set roles=new HashSet(); 2.一个角色被多个用户所选择。 private Set users=new HashSet(); 3.many-to-many 标签: class:对方类的全路径 4.编写测试类: 映射放入核心配置内: 保存·多条记录,保存多个用户和角色``` public voi...

weixin_43771542的博客 120
上一篇: Hibernate 多对多 删除操作
下一篇: Hibernate 事务未正常启动????
JavaAlpha
博客等级 码龄18年 910粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值