返回顶部
首页 > 资讯 > 后端开发 > Python >关于jpa中无法删除onetomany中many问题的解决
  • 476
分享到

关于jpa中无法删除onetomany中many问题的解决

2024-04-02 19:04:59 476人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录jpa 无法删除onetomany中many问题问题描述解决思路小结一下jpa @OneToMany 删除不了集合数据这时候如果想删除rolejpa 无法删除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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 关于jpa中无法删除onetomany中many问题的解决

本文链接: https://lsjlt.com/news/159177.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作