关于jpa中无法删除onetomany中many问题的解决
目录
- jpa 无法删除onetomany中many问题
- 问题描述
- 解决思路
- 小结一下
- jpa @OneToMany 删除不了集合数据
jpa 无法删除onetomany中many问题
问题描述
今天在做项目遇到一个问题,建立两个实体order和orderDetail,他们是onetomany关系,当我想要之间删除一个orderDetail时,发现不能删除但是程序也不出错。
实体建立模型如下图:
order中:
orderDetail中:
解决思路
1.首先我想到了直接删除orderDetail不行,是否可以直接通过update order的关联关系进行级联删除啦,于是写了一下代码
结果发现这样是可以删除orderDetail,但是这种删除方式并不是我想要的,而且感觉也不是最好的解决方法。
2.在结合上一种方法实现成功后,突然想到是否是关联关系建立的原因,如果我先把关联关系断开,在进行删除orderDetail是否能成功:
结果证明,成功删除
小结一下
虽然实现了我想要的功能,但是jpa的删除具体逻辑还需要深入研究。自我感觉是因为order是关系维护方,想要删除many端就必须先断开关系在进行删除
jpa @OneToMany 删除不了集合数据
在使用jpa的时候,如果有@OneToMany关系。想删除many的单个数据。有时候删除不了。 jap关系如下:一个用户对应多个角色。并且user实体中CascadeType.ALL
//user实体 @OneToMany(cascade = CascadeType.ALL,fetch= FetchType.LAZY,mappedBy = "user") private Set<Role> roles = new HashSet<Role>(); //role实体 @ManyToOne(fetch= FetchType.LAZY) @JoinColumn(name="user_id") private User user;
这时候如果想删除role。必须做2个事情,1、删除role。2、把role从集合roles中移除。如下:
roleRepo.delete(role);//这里删除操作需要delete和从集合中remove一起操作才能生效 user.getRoles().remove(role); userService.update(user);
如果不这样操作。就会不生效。
参考文档: https://stackoverflow.com/questions/2011519/jpa-onetomany-not-deleting-child
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
SpringData JPA中@OneToMany和@ManyToOne的用法详解
目录 一. 假设需求场景 二. 代码实现 2.1 级联存储操作 2.2 查询操作和toSting问题 2.3 级联删除 2.4 pom.xml 一. 假设需求场景 在我们开发的过程中,经常出现两个对象存在一对多或多对一的关系.如何在程序在表明这两个对象的关系,以及如何利用这种关系优雅地使用它们. 其实,在javax.persistence包下有这样两个注解--@OneTomany和@ManyToOne,可以为我们所用. 现在,我们假设需要开发一个校园管理系统,管理各大高校的学生.这是一种典型的一
-
jpa实体@ManyToOne @OneToMany无限递归方式
目录 jpa实体@ManyToOne @OneToMany无限递归 问题描述 解决办法 @OneToMany和@ManyToOne要素 jpa实体@ManyToOne @OneToMany无限递归 问题描述 Cannot call sendError() after the response has been committed 解决办法 在属性上添加注释 @JsonBackReference // data to json 和 JsonIgnore一样 // @JsonManagedRefer
-
解决JPA @OneToMany及懒加载无效的问题
目录 JPA @OneToMany及懒加载无效 @OneToMany 小结一下吧 实现JPA的懒加载和无外键 例如 转换时使用 JPA @OneToMany及懒加载无效 @OneToOne @ManyToMany使用不做过多解释,重点解决"懒加载无效问题". 示例: @OneToMany teacher 和 student是一对多关系 只需要在studentList上使用@OneToMany注解,对应的参数为 懒加载.级联操作.子表外键 我为了验证懒加载是否生效,在debug模式下发现
-
关于jpa中无法删除onetomany中many问题的解决
目录 jpa 无法删除onetomany中many问题 问题描述 解决思路 小结一下 jpa @OneToMany 删除不了集合数据 jpa 无法删除onetomany中many问题 问题描述 今天在做项目遇到一个问题,建立两个实体order和orderDetail,他们是onetomany关系,当我想要之间删除一个orderDetail时,发现不能删除但是程序也不出错. 实体建立模型如下图: order中: orderDetail中: 解决思路 1.首先我想到了直接删除orderDetail不
-
java中循环删除list中元素的方法总结
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末.看总结.. JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常说的foreach循环).iterator遍历. 1.for循环遍历list for(int i=0;i<list.size();i++){ if(list.get(i).equals("del")
-
php中批量删除Mysql中相同前缀的数据表的代码
方法一: 复制代码 代码如下: <?php mysql_connect('','',''); mysql_select_db(''); $rs=mysql_query('show tables'); while($arr=mysql_fetch_array($rs)){ $TF=strpos($arr[0],'class_'); if($TF===0){ $FT=mysql_query("drop table $arr[0]"); if($FT){ echo "$arr
-
python实现删除列表中某个元素的3种方法
python中关于删除list中的某个元素,一般有三种方法:remove.pop.del: 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除 举例说明: >>> str=[1,2,3,4,5,2,6] >>> str.remove(2) >>> str [1, 3, 4, 5, 2, 6] 2.pop: 删除单个或多个元素,按位删除(根据索引删除) >>> str=[0,1,2,3,4,5,6] >>&g
-
Java编程删除链表中重复的节点问题解决思路及源码分享
一. 题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 二. 例子 输入链表:1->2->3->3->4->4->5 处理后为:1->2->5 三. 思路 个人感觉这题关键是注意指针的指向,可以定义一个first对象(值为-1,主要用于返回操作后的链表),first.next指向head,定义一个last同样指向first(主要用于操作记录要删除节点的前一个节点),定义一个p指向head,指向当前节点.
-
Perl中怎样从数组中删除某个值?
我不确定undef是否和从数组中消除值有确切的关系,猜测一下,如果我们将undef视为"空",那么会有一些联系.但通常来说,将某些东西赋值为undef和删除某些东西是不一样的. 首先来看怎样把数组的元素赋值为undef,之后再了解如何从数组中删除元素. 从下面的代码开始: 复制代码 代码如下: use Data::Dumper qw(Dumper); my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful); print
-
Golang编程实现删除字符串中出现次数最少字符的方法
本文实例讲述了Golang编程实现删除字符串中出现次数最少字符的方法.分享给大家供大家参考,具体如下: 描述: 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 输入: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出: 删除字符串中出现次数最少的字符后的字符串. 样例输入: abcdd 样例输出: dd 代码实现: 复制代码 代码如下: package huawei impo
-
AngularJS删除路由中的#符号的方法
最近做一个web应用,有个需求需要删除angular路由中的#号. 例如: http://example.com/ http://example.com/#/about http://example.com/#/contact 需要改成 http://example.com/ http://example.com/about http://example.com/contact 这个是angular默认自带的,所以想要删除需要配置一下: $locationProvider.html5Mode(t
-
JS实现从表格中动态删除指定行的方法
本文实例讲述了JS实现从表格中动态删除指定行的方法.分享给大家供大家参考.具体如下: JS的表格对象有一个deleteRow方法用于删除表格中的指定行,只需要指定行号即可 <!DOCTYPE html> <html> <head> <script> function deleteRow(r) { var i=r.parentNode.parentNode.rowIndex; document.getElementById('myTable').deleteR
-
Centos系统中彻底删除Mysql数据库步骤
详细步骤如下所示: 1.输入命令查询系统中已安装的mysql. rpm -qa |grep -i mysql 2.逐个卸载mysql. yum remove 系统显示已安装的mysql 比如: yum remove mysql-community-server-5.7.19-1.el7.x86_64 3.卸载完成后使用find命令来查找系统中存在的mysql文件夹. find / -name mysql 4.使用rm -rf命令逐个删除文件夹路径即可. 比如: rm -rf /etc/logro
随机推荐
- JavaWeb Servlet中url-pattern的使用
- SqlServer表死锁的解决方法分享
- windows下vue-cli导入bootstrap样式
- 原生JS实现隐藏显示图片 JS实现点击切换图片效果
- JS脚本实现动态给标签控件添加事件的方法
- 简介JavaScript中的italics()方法的使用
- NodeJS收发GET和POST请求的示例代码
- Oracle11g RAC开启关闭、设置归档小结
- asp.net中使用cookie与md5加密实现记住密码功能的实现代码
- Yii2中SqlDataProvider用法示例
- Shell脚本实现批量替换文件内容
- Android仿微信朋友圈实现滚动条下拉反弹效果
- 利用boost获取时间并格式化的方法
- Android编程双重单选对话框布局实现与事件监听方法示例
- 如何优雅的进行Spring整合MongoDB详解
- MySQL 8 新特性之Invisible Indexes
- 详解vue的双向绑定原理及实现
- 详解Java生成PDF文档方法
- JS去除字符串最后的逗号实例分析【四种方法】
- Nginx大并发优化实战