(J2EE学习笔记)解决Hibernate删除异常:deleted object would be re-saved by cascade
我们在指定了数据库表的关联映射后,在删除其中一方的的时候,提示了以下异常:deleted object would be re-saved by cascade (remove deleted object from associations): [entity.Associationinformation#7]
(注:entity.Associationinformation是实体类,7为设定的外键的值)
下面是我的多对一关联情况:
1、实体类:
entity.Associationinformation和entity.Associationactivitylist,前者为one,后者为many。
Associationinformation.java:
public class Associationinformation implements java.io.Serializable {
private Integer assoId;
private String assoName;
private String assoPosition;
private Integer assoPersonNum;
private String assoBuildDate;
private String assoIntroduce;
private String assoServiceObject;
//一对一的社团负责人
private Associationrespeople assoResID;
//一对多的社团活动
private Set<Associationactivitylist> assoActivity;
//省略get/set方法
}
Associationactivitylist.java:
public class Associationactivitylist implements java.io.Serializable {
private Integer activityId;
private String activityName;
private String activityPosition;
private Integer activityPersonNum;
private String activityTime;
private String activityContent;
private Associationinformation association;
//省略get/set方法
}
2、映射文件:*.hbm.xml
Associationinformation.hbm.xml:
<hibernate-mapping><class name="entity.Associationinformation" table="associationinformation" catalog="stu_association"><id name="assoId" type="java.lang.Integer"><column name="AssoID" /><generator class="increment" /></id><property name="assoName" type="java.lang.String"><column name="AssoName" length="20" /></property><property name="assoPosition" type="java.lang.String"><column name="AssoPosition" length="20" /></property><property name="assoPersonNum" type="java.lang.Integer"><column name="AssoPersonNum" /></property><property name="assoBuildDate" type="java.lang.String"><column name="AssoBuildDate" length="10" /></property><!-- <property name="assoResName" type="java.lang.String"><column name="AssoResName" length="20" /></property>--><property name="assoIntroduce" type="java.lang.String"><column name="AssoIntroduce" length="150" /></property><property name="assoServiceObject" type="java.lang.String"><column name="AssoServiceObject" length="20" /></property><!-- 一对多的社团与社团活动 --><set name="assoActivity" table="associationactivitylist"><key column="assoID"></key><one-to-many class="entity.Associationactivitylist"/></set><!-- 一对一的社团负责人 --><many-to-one name="assoResID"class="entity.Associationrespeople"column="assoResID"lazy="false"cascade="all"unique="true"></many-to-one></class> </hibernate-mapping>
Associationactivitylist.hbm.xml:
<hibernate-mapping><class name="entity.Associationactivitylist" table="associationactivitylist" catalog="stu_association"><id name="activityId" type="java.lang.Integer"><column name="ActivityID" /><generator class="increment" /></id><property name="activityName" type="java.lang.String"><column name="ActivityName" length="20" not-null="true" /></property><property name="activityPosition" type="java.lang.String"><column name="ActivityPosition" length="20" not-null="true" /></property><property name="activityPersonNum" type="java.lang.Integer"><column name="ActivityPersonNum" /></property><property name="activityTime" type="java.lang.String"><column name="ActivityTime" length="10" not-null="true" /></property><property name="activityContent" type="java.lang.String"><column name="ActivityContent" length="150" /></property><!-- 配置多对一关联关系 --> <many-to-one name="association" class="entity.Associationinformation" column="assoID" cascade="all"> </many-to-one></class> </hibernate-mapping>
记得在Hibernate.cfg.xml中声明映射文件的路径:
<mapping resource="entity/Associationinformation.hbm.xml" /> <mapping resource="entity/Associationactivitylist.hbm.xml" />
到这里就完成了一对多的关联配置,然后在Action中写Delete()方法:
public String deleteActivity(){
...
Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
assoActivityDao.delete(associationactivitylist);
tx.commit();
HibernateSessionFactory.closeSession();
...
}
请注意,这样写的话,就会报出以上异常,如果没有关联关系,这样写是可以的。结合了网上的方法,解决方法如下:
1、删除Set方的cascade:(缺点:子对象和父对象不能进行级联更新,没意义)
2、解决关联关系后,再删除(个人推荐):
将Action中的方法改为:
public String deleteActivity(){
...
Associationactivitylist associationactivitylist = assoActivityDao.findById(AssoID);
Associationinformation Association = associationactivitylist.getAssociation();
Association.getAssoActivity().remove(associationactivitylist);
associationactivitylist.setAssociation(null);
Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
assoActivityDao.delete(associationactivitylist);
tx.commit();
HibernateSessionFactory.closeSession();
...
}
分别获取到社团和社团活动对象后,利用remove方法解除关联管理,再将one方的值设为null。
转载于:https://blog.51cto.com/cfdeng/1755553
(J2EE学习笔记)解决Hibernate删除异常:deleted object would be re-saved by cascade相关推荐
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题
Android学习笔记----解决"com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 6553 ...
- RT-Thread 入门学习笔记 - 解决RT_ASSERT失效的问题
RT-Thread 入门学习笔记 - menuconfig Kconfig的使用 RT-Thread 入门学习笔记 - 熟悉动态内存申请与释放 RT-Thread 入门学习笔记 - 查看线程栈的地址 ...
- java学习笔记6--类的继承、Object类
接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...
- WPF基础学习笔记(一)Dependency Object 和 Dependency Property
.依赖属性是WPF个人觉得对精彩和最有特色的部分.所以特地先拿出来. 首先要实现Dependency Property 则必须要继承Dependency Object.如果看下WPF的基础控件其实都间 ...
- JAVA学习笔记--类型转换(父类子类 Object 基本类型 String) 拆装箱 包装类
最近一段时间忙着学习JAVA,本来net学的也不怎么好,趁着这个机会转下方向学习JAVA.不过.NET core的开源还是有点搞头的,微软了解一下.接下来几天我也会陆续写一些内容关于线程和集合等方面, ...
- 我的java学习笔记之hibernate进阶…
这个是自己总结的hibernate东西,这只是笔记而已,后期要把真实的代码贴出来以及整合. ----------------------------------一对多单向关联关系:unidirecti ...
- J2EE学习笔记----java pk .net
大概五年前,微软发布了.NET Framework,这是Java/J2EE和.NET平台上最流行的几个"专家级"产品之一.从那以来,我一直在讲Java/.NET的协调性.无论我在哪 ...
- android8 通知呼吸灯_android学习笔记----解决兼容8.0以上和8.0之前版本通知栏显示、振动、LED呼吸灯闪烁问题(真机验证)...
Android 8.0系统的通知栏适配文章讲解(郭霖大神的): 然后开始试验了: 模拟器: 真机(华为荣耀V9,8.0系统),下拉横幅需要手动打开,除非是厂家白名单,比如QQ.微信 我在oppo手机6 ...
最新文章
- 光学传输与摄像头光学技术
- 互联网巨头终极战场:得开发者得天下
- linux centos7安装git服务器配置,CentOS7 Linux环境下搭建Git仓库
- Spring中如何使用设计模式
- C语言实现高斯-赛德尔迭代gauss seidel(附完整源码)
- gd动态曲线 php_PHP GD库动态生成折线图的实例代码
- 调试技术: Linux core dump file
- office安装出现windows installer服务不能更新一个或多个受保护的windows文件
- 一位程序员妹纸讲述她是如何拿到美团offer的?
- TeeChart插入
- 计算机专业认识实习目的,计算机专业实习目的与意义
- 苹果手机有护眼模式吗_玩手机眼睛疼?你需要开启护眼模式~
- (四)Ps快速选择/魔棒
- 重新思考人体姿态估计 Rethinking Human Pose Estimation
- VINS-MONO概述
- python可以构建sem模型_Python Pandas Series.sem()用法及代码示例
- 谈一谈游戏AI - 行为树
- C#实现qq邮箱发送邮件(验证码)
- 校招 - 行业测评题、图形推理题、逻辑思维面试题,解题技巧汇总
- Linux系统checkra1n装错插件,CheckRa1n越狱常见问题汇总 CheckRa1n越狱问题解决方法
热门文章
- Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)
- 计算机科学与技术的深度研究,专业深度分析--计算机科学与技术.docx
- 力扣高频算法php_互联网公司最常见的面试算法题有哪些?
- 目标检测评价指标mAP计算
- matlab simulink 四分之一1/4车辆垂向振动模型 轮毂电机
- oracle脱机备份文件拒绝访问,如何解决备份文件夹拒绝访问问题
- linux下java调用matlab程序,linux_java调用windows_matlab程序
- 数据结构实验之二叉树五:层序遍历(STL和模拟队列两种方法)
- 视频清晰度、色偏以及亮度异常检测
- Java Web -【分页功能】详解