在进行jpa更新操作中报异常Cascade="All-Delete-Orphan" 处理

本文详细解析了在使用Hibernate框架时遇到的级联删除孤儿集合异常问题:Acollectionwithcascade=“all-delete-orphan”wasnolongerreferencedbytheowningentityinstance。通过具体代码示例,介绍了如何正确配置一对多关系,以及在更新实体时如何处理集合,确保级联操作的正确执行。

报错异常:A collection with cascade=“all-delete-orphan” was no longer referenced by the owning entity instance

#解决方式:

    //一对多配置  一个订单多个明细  最强级联、mappedBy = "requestId",
    @OneToMany(cascade = CascadeType.ALL,mappedBy = "requestId",orphanRemoval = true)
//    @JoinColumn(name = "request_id") //配置了mappedBy,就不能在这@JoinColumn
    private List<RepairDetailed> repairDetailList=new ArrayList<>();


    public List<RepairDetailed> getRepairDetailList() {
        return repairDetailList;
    }

    public void setRepairDetailList(List<RepairDetailed> repairDetailList) {
    	//-----------在set方法处处理解决-----------------------
        this.repairDetailList.clear();
        this.repairDetailList.addAll(repairDetailList);
//        this.repairDetailList = repairDetailList;
    }

具体解释:

引用此处:https://blog.csdn.net/qq_17625317/article/details/52182511

最后要一方能找到多方,同样,多方也能找到一方

 @Log("修改RepairRequest")
 @ApiOperation(value = "修改RepairRequest")
  @PutMapping(value = "/repairRequest")
  @PreAuthorize("hasAnyRole('ADMIN','REPAIRREQUEST_ALL','REPAIRREQUEST_EDIT')")
  public ResponseEntity update(@Validated @RequestBody RepairRequest repairRequest){
      System.out.println("修改时前台提交过来的参数"+repairRequest);

      //一方找多方,能找到
      List<RepairDetailed> repairDetailList = repairRequest.getRepairDetailList();
      System.out.println("一方找多方:"+repairDetailList);//能找到明细  但是多方中一方的关联字段为空
      //多方找一方,需要处理:将订单repairRequest设置进去就行
      for(RepairDetailed detailList :repairDetailList){
          System.out.println("多方找一方:"+detailList.getRequestId());
          detailList.setRequestId(repairRequest);
      }
      repairRequestService.update(repairRequest);
      return new ResponseEntity(HttpStatus.NO_CONTENT);
  }

在这里插入图片描述

而相应的实体类配置:

订单明细实体类

在这里插入图片描述

订单实体类

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值