阅读 166

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

这篇文章主要介绍了关于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

    1
    2
    3
    4
    5
    6
    7
    8
    //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中移除。如下:

    1
    2
    3
    roleRepo.delete(role);//这里删除操作需要delete和从集合中remove一起操作才能生效
    user.getRoles().remove(role);
    userService.update(user);

    如果不这样操作。就会不生效。

    参考文档: https://stackoverflow.com/questions/2011519/jpa-onetomany-not-deleting-child

    以上为个人经验,希望能给大家一个参考

    原文链接:https://blog.csdn.net/qq_28469355/article/details/86295929


    文章分类
    百科问答
    版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
    相关推荐