这篇文章主要介绍“jpa中无法删除onetomany中many怎么办”,在日常操作中,相信很多人在jpa中无法删除onetomany中many怎么办问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jpa中无法删除onetomany中many怎么办”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
今天在做项目遇到一个问题,建立两个实体order和orderDetail,他们是onetomany关系,当我想要之间删除一个orderDetail时,发现不能删除但是程序也不出错。
实体建立模型如下图:
order中:
orderDetail中:
1.首先我想到了直接删除orderDetail不行,是否可以直接通过update order的关联关系进行级联删除啦,于是写了一下代码
结果发现这样是可以删除orderDetail,但是这种删除方式并不是我想要的,而且感觉也不是最好的解决方法。
2.在结合上一种方法实现成功后,突然想到是否是关联关系建立的原因,如果我先把关联关系断开,在进行删除orderDetail是否能成功:
结果证明,成功删除
虽然实现了我想要的功能,但是jpa的删除具体逻辑还需要深入研究。自我感觉是因为order是关系维护方,想要删除many端就必须先断开关系在进行删除
在使用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);
如果不这样操作。就会不生效。
到此,关于“jpa中无法删除onetomany中many怎么办”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。