hibernate一对多删除问题

Hibernate: select emsdepartm0_.department_id as department1_0_0_, emsdepartm0_.department_code as department2_0_0_, emsdepartm0_.department_name as department3_0_0_, emsdepartm0_.department_remark as department4_0_0_ from ems_department emsdepartm0_ where emsdepartm0_.department_id=?
Hibernate: delete from ems_department where department_id=?
21:02:05,859  WARN JDBCExceptionReporter:71 - SQL Error: 1451, SQLState: 23000
21:02:05,875 ERROR JDBCExceptionReporter:72 - Cannot delete or update a parent row: a foreign key constraint fails (`ems/ems_user`, CONSTRAINT `FK4B8CE2BF6DE6CB4B` FOREIGN KEY (`department_id`) REFERENCES `ems_department` (`department_id`))
21:02:05,875 ERROR AbstractFlushingEventListener:301 - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
 at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
 at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
 at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)
 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:144)
 at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
 at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
 at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
 at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
 at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
 at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:558)
 at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:540)
 at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:510)
 at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:310)
 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:117)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
 at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
 at $Proxy9.delete(Unknown Source)
 at cn.com.kingkit.ems.service.DepartmentServiceTest.testDepartmentAndUser_delete(DepartmentServiceTest.java:41)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at junit.framework.TestCase.runTest(TestCase.java:154)
 at junit.framework.TestCase.runBare(TestCase.java:127)
 at junit.framework.TestResult$1.protect(TestResult.java:106)
 at junit.framework.TestResult.runProtected(TestResult.java:124)
 at junit.framework.TestResult.run(TestResult.java:109)
 at junit.framework.TestCase.run(TestCase.java:118)
 at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.sql.BatchUpdateException: Cannot delete or update a parent row: a foreign key constraint fails (`ems/ems_user`, CONSTRAINT `FK4B8CE2BF6DE6CB4B` FOREIGN KEY (`department_id`) REFERENCES `ems_department` (`department_id`))
 at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:648)
 at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
 at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
 at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
 ... 32 more

 

 

 

EmsDepartment---->EmsUser : one-to-many.

hbm文件如下:

 

EmsDepartment.hbm.xml:

 

 <set name="emsUsers" inverse="true" cascade="delete">
            <key>
                <column name="department_id" />
            </key>
            <one-to-many class="cn.com.kingkit.ems.userManage.model.EmsUser" />
 </set>

 

EmsUser.hbm.xml:

 

 <many-to-one name="emsDepartment" class="cn.com.kingkit.ems.departmentManage.model.EmsDepartment"

             fetch="select" lazy="false" cascade="save-update">
            <column name="department_id"/>
</many-to-one>

 

测试代码如下:

BeanFactory factory = null;
	IDepartmentService service = null;	
	protected void setUp() throws Exception {
		//加载资源
		this.factory = new ClassPathXmlApplicationContext(new String[] {
				"applicationContext-actions.xml",
				"applicationContext-beans.xml",
				"applicationContext-common.xml"});
		this.service = (IDepartmentService)this.factory.getBean("departmentService");
	}
	
	
	public void testDepartmentAndUser_delete(){
		EmsDepartment department = new EmsDepartment();
		department.setDepartmentId("402881e61f50c42c011f50c435030001");		
		this.service.delete(department);
	}

 

搞了半天,原来问题出现在

EmsDepartment department = new EmsDepartment();

department.setDepartmentId("402881e61f50c42c011f50c435030001");
this.service.delete(department);
因为department 为new的实例,在hibernate对象的三种状态中属于瞬时态(Transient),这样级联删除是不行的.

知道了原因,改回来了就成了:

  EmsDepartment department = new EmsDepartment();
  department.setDepartmentId("402881e61f4fff76011f4fff7f680001");
  EmsDepartment d = (EmsDepartment)this.service.findById(department);
  this.service.delete(d);

高速接口电平标准互连设计:LVPECL、PECL与LVDS的实战解析 本文深入解析了LVPECL、PECL与LVDS三种高速接口电平标准的互连设计实战。针对信号共模电压、阻抗匹配等核心差异,详细对比了直流耦合与交流耦合两种主流方案,并提供了电阻网络计算、布局布线要点及光模块等特殊场景下的选型建议,帮助工程师解决高速信号间的“翻译”难题,确保信号完整性。 阅读详情

相关推荐

基于任务的后勤智能体:三段构建与演进设计探究

这是系统智能化的核心难点。例如,对于一个“加强连级滩头阵地防御”子任务,系统会根据防御时长、预期敌军攻击强度、地形等因素,计算出所需的弹药(不同弹种的具体数量)、构筑工事的器材、人员的给养和饮水量、以及医疗救护的药品和血包数量。首先进行分词、词性标注等基础处理,然后利用在军事语料库上训练的命名实体识别(NER)模型,提取出关键实体,如任务类型(“夺控作战”)、作战对象(“Y岛”)、时间约束(“D日H时”、“24小时内”)、成功标准(“建立稳固滩头阵地”)、保障重点(“弹药充足”、“及时救治”)等。

weixin_49042442的博客 1088

Jpa一对多关系的删除 数据删除失败

Jpa一对多关系的删除 从表数据没有被删除 今天,在学习jpa是遇到一个问题,就是删除从表数据时,控制台打印了两次查询操作的sql语句,就和纳闷,明明调用的是deleteById方法,不应该先打印查询语句,然后才是删除语句。下面详细说说这个问题: 主表与从表的区分 简单一点的区分方式是: 主表:不含外键字段的表 从表:含有外键字段的表 我做的这个练习,主表是班级表: @Getter @Setter @Entity(name = "t_clazz") public class Clazz {//new Cl

qq_38530648的博客 2636

基于PTB-XL数据集的深度学习心电信号分类

心电信号的分析与处理是心血管疾病诊断的重要手段。该领域的主要工作领域是分类,它越来越多地得到基于机器学习的算法的支持。在这项工作中,开发了一个深度神经网络来自动分类初级心电信号。这项研究是在PTB-XL数据库中包含的数据上进行的。提出了三种神经网络架构:第一种基于卷积网络,第二种基于SincNet,第三种基于卷积网络,

weixin_55121617的博客 7007

hibernate一对多增删

1、一方实体类Customer.java package model; import java.util.HashSet; import java.util.Set; public class Customer { private Long cust_id; private String cust_name; private Long cust_user_id; private Lo

qq_28562411的博客 336

告别MATLAB!用Python的PYPOWER搞定电力系统潮流计算(附Case30完整代码)

本文介绍了如何从MATLAB迁移到Python,使用PYPOWER工具包进行电力系统潮流计算。通过详细的环境准备、数据接口兼容性实践、潮流计算实现及最优潮流计算进阶,帮助工程师和学生无缝过渡到Python生态。文章还展示了结果处理与可视化技巧,并附有Case30完整代码示例。

weixin_30411819的博客 298

AI 小说生成器本地部署完全指南

这篇文章介绍了本地部署AI小说生成器的完整指南,主要面向网文作者、内容创作者和AI爱好者。文章从环境搭建到创作实践,详细讲解了三种主流部署方案:Ollama(推荐新手)、LMStudio(图形界面)和text-generation-webui(高级定制)。内容涵盖硬件需求、系统架构、模型选择、API对接、提示词工程等关键技术环节,并提供了小说创作的特制提示词模板和参数调优建议。文章还讨论了长篇小说管理、多模型协作等进阶技巧,以及版权伦理等法律问题。最后推荐了相关工具资源和社区论坛,帮助读者实现安全、高效、可

珂珂可爱多 2246

Hibernate 一对多级联删除

大背景:Struts2,Spring,Hibernate,MyEclipse Hibernate一对多级联删除 实例一 背景: 系统中有post表和replay表。分表表示帖子和帖子回复的表。一篇帖子可以有多个回复。 要求: 现在要求删除一篇帖子的同时删除对应的replay表中该帖子的所有回复。 实现: 在post.hbm.xml中这样配置...

weixin_30478619的博客 239

用python将dycom .dcm格式图像转换为nifti .nii

因为发现目前搜索到的多数中文教程并不能正确将FMRI图像正确转换,例如很多用simpleITk的seriesreader的,所以写了一下自己正确转换的方法。因为FMRI是一个4D数据,有时间轴,所以用seriesreader读写出来的图像把时间轴维度给降维了。当然你用SPM12工具的dycom import也是能正确转换的,但是我还是喜欢python这样的,代码直接简单。

qq_41103479的博客 3609

Hibernate的学习之路二十二(一对多的级联删除)

前言    这篇主要说明了级联删除,比较繁琐需要举例子说明   代码 技术分析之级联删除 1. 先来给大家在数据库中演示含有外键的删除客户功能,那么SQL语句是会报出错误的 * 例如:delete from customers where cid = 1; 2. 如果使用Hibernate框架直接删除客户的时候,测试发现是可以删除的(这里需要配置级联删除,如果不配置也是报错的...

玩垃圾的人 3120

DeepQA: A Unified Transcriptome-Based Aging Clock Using Deep Neural Networks

摘要: 本研究针对转录组衰老时钟存在的关键局限——仅在健康样本训练导致对患病个体预测偏差的问题,提出DeepQA,一种基于专家混合架构与新型Hinge-MAE损失函数的深度学习模型。通过同时利用健康与患病个体的异质数据训练,DeepQA显著提升预测精度:在健康个体上MAE比现有方法低1.5年,且是首个能正确处理五类疾病条件的模型。其创新性体现在: 方法学突破:Hinge-MAE损失函数消除健康/患病样本的训练偏差,专家混合架构高效整合多队列数据; 流程革新:摒弃传统基因预筛选步骤,通过显著图分析直接识别衰老

qq_44050612的博客 125

雷达工程师面试题目

详细描述项目背景、目标、你的具体职责和贡献,分析在项目实施过程中遇到的主要技术难题及解决方案,总结项目取得的成果和经验教训。

道亦无名 738

Hibernate中单向一对多删除级联数据问题

publicstaticvoidmain(String[]args){ //test(); //test1(); //test2(); //test3(); //test4(); //test5(); //测试one2many单向 test6(); //测试单向维护关系delete删除操作 //...

weixin_33889245的博客 172

乐企归集能力说明文档V2.0006

纳税人销售货物、提供服务开具的增值税发票及购进货物、接受服务取得的增值税发票、海关缴款书(含出口转内销证明)、代扣代缴完税凭证,可以通过本能力进行归集。纳税人可将本能力中的各类规则和接口嵌入本单位信息化系统中(如:销售、报销、财务等),实现发票自动化归集,便于纳税人完成发票入账、抵扣、退税以及代办退税等操作,有效提升涉税业务办理效率。

记录点滴 573

Hibernate中一对多的相关操作

Hibernate中一对多的相关操作 什么叫做级联操作? 级联操作指的是,操作一个对象的时候,会同时操作其关联的对象。 级联是有方向性: 操作一的一方的时候,是否操作到多的一方。 操作多的一方的时候,是否操作到一的一方。 1、级联保存更新 测试代码1: package com.pipi.hibernate03; import myutils.HibernateUtil; import org.hibernate.Session; import org.hibernate.Transaction; /*

pipizhen_的博客 231

廖雪峰Python教程[完整版]

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Hibernate的映射关系与级联(一对一、一对多、多对多)

Hibernate的映射关系与级联(一对一、一对多、多对多) 长期专业踩坑,现记录点滴,望提升自我,为祖国软件事业作贡献(害羞脸) 1、主键一对多示例 2、非主键一对多示例 3、主键多对多示例 4、非主键多对多示例 5、主键一对一示例 6、非主键一对一示例 7、双向示例 8、单向示例

iamzhuwh 1548

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Hibernate一对多操作

文章目录1:一对多映射配置2:一对多级联保存3:一对多级联删除4:一对多级联修改(inverse属性,目的:提高效率) 1:一对多映射配置 第一步:创建两个实体类,客户和联系人 第二步:让两个实体类之间互相表示 在客户实体类里面表示多个联系人(一个客户有多个联系人) //在客户实体类里面表示有多个联系人,一个客户有多个联系人(hibernate要求使用集合表示多的数据,使用set集合 pri...

qq_44891295的博客 359

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Hibernate学习笔记(映射)

代码注释简洁易懂,笔记就简略写了,代码已上传 链接:https://pan.baidu.com/s/1-GswKfv5WuCwMqK_kkV_cQ  提取码:b41n    Hibernate的一对多关联映射     数据表与表之间的关系         一对多:例如,一个部门对于多个员工,一个员工只能属于某个部门         建表原则:在多的一方创建外键指向一的一方的主键   ...

Au 383

SSH框架---Hibernate中的一对多关系映射与多对多关系映射(七)

前提:表数据和表数据之间可以存在的关系?1、一对多(最多) 建表原则:在多的一方创建一个字段当成是外键2、多对多 建表原则:创建一张中间表,这个中间表中至少需要2个字段,分别指向各自表的主键3、一对一(企业开发中很少,其实就是合成一张表来使用)引申到,实体类和实体类之间可以存在的关系?1、一对多 创建原则:在一中创建多的集合;在多中创建一的的对象2、多对多 创建原则:互相都有...

qq_37358143的博客 508

Hibernate笔记

最近把项目从OJB移植到Hibernate, 收获很多。OJB已经被apache标记为过时了,所以我也没有太多关注。Hibernate作为当前最流行的ORM框架,也有很多缺陷。 以下是我遇到的问题及解决方法. 1. config file or annotation? 老的方式是把java类和表的映射关系写在配置文件里,好处是上手快,功能也比较全,但不直观,不易维护。标注的方式是hibern

liuhebing的专栏 4534

一对多(级联新增,级联查询,删除)

1. 什么是关联(association)   1.1 关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。例如:       public class A{         private B b = new B;         public A(){}       }   1.2 关联的分类:关联可以分为一对一、一对多/多对一、多对多关联       关联是...

qq_41683274的博客 1294

hibernate学习(五)

hibernate学习(五)(一对多关系的操作)

m0_55028858的博客 530

关于使用Hibernate关联关系后数据库表中的删除标志位问题

最近准备使用Hibernate的关联关系(也就是一对多,多对多等)构架一个项目,但是数据库设计的时候会每个表都会加上一个deleted(0为正常,1为已删除)字段做为删除标志位,因此使用Hibernate的关联关系时遇到了一个问题不知如何解决,具体如下: Hibernate在删除一对多关系中一的一方时会级联删除多的那方,这样的话使用删除标志后不删除数据只更新标志位deleted=1,这种方式如何...

afusky的专栏 484

JPA和Hibernate级联类型的初学者指南

介绍 JPA将实体状态转换转换为数据库DML语句。 由于对实体图进行操作很常见,因此JPA允许我们将实体状态更改从父级传播到子级 。 通过CascadeType映射配置此行为。 JPA与Hibernate级联类型 Hibernate支持所有JPA级联类型和一些其他旧式级联样式。 下表绘制了JPA级联类型与其等效的Hibernate本机API之间的关联: JPA EntityM...

最佳 Java 编程 340

Hibernate的数据删除,更改

                      其他未给出代码,请参考上一篇.... 一.数据的删除 方法1.从“多”的一方进行数据的删除 books.hbm.xml文件不变: &lt;many-to-one name="publishers" column="publisherId" class="com.entry.Publishers" lazy="false" ...

weixin_33738555的博客 79

Hibernate(三) - hibernate 表操作-多对多配置

Hibernate 的一对多关联映射 之前在学习 Hibernate 的时候,其实都是单表的操作。在实际的开发当中,比如做一个商城,就需要好多张数据库表,表与表之间是有关系的。之前些做一些关联查询或者是一些基本的查询操作的时候,都是写 SQL 语句去关联两张表,这样子稍微有一点麻烦。那么有了 Hibernate 之后,它就可以解决这类问题了。在这之前,先了解一些数据库 表之间的关系,它是有三种...

weixin_30563319的博客 161

hibernate级联 新增及删除

新建一个xml文件,配置书籍实体的映射 ,Book.hbm.xml–》匹配实体类 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate....

KidShmily的博客 614
上一篇: Struts 2 快速入门---Struts 2.0 学习笔记
下一篇: acegi拦截不了struts2的.action请求问题
kingkit
博客等级 码龄19年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值