我们在指定了数据库表的关联映射后,在删除其中一方的的时候,提示了以下异常: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相关推荐

  1. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  2. Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题

    Android学习笔记----解决"com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 6553 ...

  3. RT-Thread 入门学习笔记 - 解决RT_ASSERT失效的问题

    RT-Thread 入门学习笔记 - menuconfig Kconfig的使用 RT-Thread 入门学习笔记 - 熟悉动态内存申请与释放 RT-Thread 入门学习笔记 - 查看线程栈的地址 ...

  4. java学习笔记6--类的继承、Object类

    接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...

  5. WPF基础学习笔记(一)Dependency Object 和 Dependency Property

    .依赖属性是WPF个人觉得对精彩和最有特色的部分.所以特地先拿出来. 首先要实现Dependency Property 则必须要继承Dependency Object.如果看下WPF的基础控件其实都间 ...

  6. JAVA学习笔记--类型转换(父类子类 Object 基本类型 String) 拆装箱 包装类

    最近一段时间忙着学习JAVA,本来net学的也不怎么好,趁着这个机会转下方向学习JAVA.不过.NET core的开源还是有点搞头的,微软了解一下.接下来几天我也会陆续写一些内容关于线程和集合等方面, ...

  7. 我的java学习笔记之hibernate进阶…

    这个是自己总结的hibernate东西,这只是笔记而已,后期要把真实的代码贴出来以及整合. ----------------------------------一对多单向关联关系:unidirecti ...

  8. J2EE学习笔记----java pk .net

    大概五年前,微软发布了.NET Framework,这是Java/J2EE和.NET平台上最流行的几个"专家级"产品之一.从那以来,我一直在讲Java/.NET的协调性.无论我在哪 ...

  9. android8 通知呼吸灯_android学习笔记----解决兼容8.0以上和8.0之前版本通知栏显示、振动、LED呼吸灯闪烁问题(真机验证)...

    Android 8.0系统的通知栏适配文章讲解(郭霖大神的): 然后开始试验了: 模拟器: 真机(华为荣耀V9,8.0系统),下拉横幅需要手动打开,除非是厂家白名单,比如QQ.微信 我在oppo手机6 ...

最新文章

  1. 光学传输与摄像头光学技术
  2. 互联网巨头终极战场:得开发者得天下
  3. linux centos7安装git服务器配置,CentOS7 Linux环境下搭建Git仓库
  4. Spring中如何使用设计模式
  5. C语言实现高斯-赛德尔迭代gauss seidel(附完整源码)
  6. gd动态曲线 php_PHP GD库动态生成折线图的实例代码
  7. 调试技术: Linux core dump file
  8. office安装出现windows installer服务不能更新一个或多个受保护的windows文件
  9. 一位程序员妹纸讲述她是如何拿到美团offer的?
  10. TeeChart插入
  11. 计算机专业认识实习目的,计算机专业实习目的与意义
  12. 苹果手机有护眼模式吗_玩手机眼睛疼?你需要开启护眼模式~
  13. (四)Ps快速选择/魔棒
  14. 重新思考人体姿态估计 Rethinking Human Pose Estimation
  15. VINS-MONO概述
  16. python可以构建sem模型_Python Pandas Series.sem()用法及代码示例
  17. 谈一谈游戏AI - 行为树
  18. C#实现qq邮箱发送邮件(验证码)
  19. 校招 - 行业测评题、图形推理题、逻辑思维面试题,解题技巧汇总
  20. Linux系统checkra1n装错插件,CheckRa1n越狱常见问题汇总 CheckRa1n越狱问题解决方法

热门文章

  1. Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)
  2. 计算机科学与技术的深度研究,专业深度分析--计算机科学与技术.docx
  3. 力扣高频算法php_互联网公司最常见的面试算法题有哪些?
  4. 目标检测评价指标mAP计算
  5. matlab simulink 四分之一1/4车辆垂向振动模型 轮毂电机
  6. oracle脱机备份文件拒绝访问,如何解决备份文件夹拒绝访问问题
  7. linux下java调用matlab程序,linux_java调用windows_matlab程序
  8. 数据结构实验之二叉树五:层序遍历(STL和模拟队列两种方法)
  9. 视频清晰度、色偏以及亮度异常检测
  10. Java Web -【分页功能】详解