Row was updated or deleted by another transaction or unsaved-value mapping was incorrect解决

Row was updated or deleted by another transaction or unsaved-value mapping was incorrect 记录报错

使用jpa进行update时错误
fk为外键
我的问题处在 ,子对象里面fk不为0 jpa会报Row was updated or deleted by another transaction or unsaved-value mapping was incorrect
将jpa 子对象 fk 置0

2.客户端传入的对象中 version 与 数据库中的version 需要一致

下面继承 自己封装的

package com.jzt.fl.upstream.basic.contracts.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.jzt.fl.basic.biz.exSystemProxy.PushBillDto;
import com.jzt.wotu.data.annotation.Cascade;
import com.jzt.wotu.data.annotation.ChangedIgnore;
import com.jzt.wotu.data.jpa.annotation.RepositoryBean;
import fl.common.entity.BaseBill;
import fl.common.entity.BaseFkBill;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 缴款单
 * @Author lbc
 * @Date 9:12 2022/5/19
 **/
@Getter
@Setter
@Entity
@Table(name = "TB_FL_SETTLE")
@RepositoryBean("FLSettleSumInfoRepository")
public class FLSettleSumInfo extends BaseFkBill implements Serializable {

    /**
     * 协议类型(0是地采1是集采)
     */
    private  String PactType;

   
    /**
     * 单据日期,缴款、欠款、还款的日期
     */
    private Date BillDate;
    /**
     * 采购人ID
     */
    private  String PurchaserId;
    
    //采购人名称
    private  String Purchaser;
    
    // 实际缴款单位ID
    private  String ActPayId;
    
    //实际缴款单位
    private  String ActPayName;
    
    //缴款人
    private  String ActPayPerson;
    
    //收取形式,见收取形式字典
    private  String PayWay;
    
    //收取形式,见收取形式字典
       // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
                             //"GetDictItemName", "PayWay", "CollectType")]
   @Transient
    private  String PayWayName;
    
    //金额
    private BigDecimal PayAmount;
    
    //票折单号
    private  String Bill2No;
    
    //票折票号
    private  String InvoiceNo;
    
    //实收类型ID
    private  String ActIncomeTypeId;
    
    //	实收类型
       // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
                             //"GetDictItemName", "ActIncomeTypeId", "DraftItemType")]
    @Transient
    private  String ActIncomeTypeName;
    
    //有无折扣证明,1是,0否,默认0
    private  Integer IsEvidence;
    
    //开票项目ID
    private  String InvoiceProjId;
    
    //	开票项目ID
       // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
                             //"GetDictItemName", "InvoiceProjId", "DraftItemType")]
    @Transient
    private  String InvoiceProjName;
    
    //票据类型
    private  String InvoiceType;
    
    //票据类型
    @Transient
    private  String InvoiceTypeName;
    
    //缴税标识
    private  String TaxIdentify;
    
    //	缴税标识
    @Transient
    private  String TaxIdentifyName;
    
    //凭证号
    private  String CertNo;
    
    //预计还款日,还款单用
    private  Date PrercvDate;
    
    //是否收入,1是,0否
    private  Integer IsIncome;
    
    //是否提成,1是,0否
    private  Integer IsRoyalty;
    
    //单据类型,1:缴款单,2:欠款单,3、还款单,4:预收单,5、预收分配单
    private  Integer BillType;
    
    //是否转实收,0:没有,1:已转实收,默认0.欠款单不允许转实收
    private  Integer ToIncome;
    
    //明细
    @Fetch(FetchMode.JOIN)
    @OneToMany(mappedBy = "flSettleSumInfo", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
    @Cascade
    private Set<FLSettleDetailInfo> FLSettleDetailInfos = new HashSet<>();

    //操作人
    private  String LastmodifyId;

    //操作人名称
    private  String LastmodifyName;

    
    //欠款单ID,还款单用,还的哪个欠款单
    private  String DebtId;

   @Fetch(FetchMode.JOIN)
   @OneToMany(mappedBy = "settleSumInfo", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
   @Cascade
    private  Set<FLDiscountUsedInfo> FLDiscountUsedInfos = new HashSet<>();

    //       // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
//                             //"GetPactValueByFileName", "FK", "PactYear")]
    @Transient
    private String PactYear;
    // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
    //"GetPactValueByFileName", "FK", "PactBillId")]
    @Transient
    private String PactBillId;
    // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
    //"GetPactValueByFileName", "FK", "CustNo")]
    @Transient
    private String CustNo;
    // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
    //"GetPactValueByFileName", "FK", "CustName")]
    @Transient
    private String CustName;
    // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
    //"GetPactValueByFileName", "FK", "CustID")]
    @Transient
    private String PactCustID;
    // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
    //"GetPactValueByFileName", "FK", "PactPurchaser")]
    @Transient
    private String PactPurchaser;
    // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
    //"GetPactValueByFileName", "FK", "PactPurchaserId")]
    @Transient
    private String PactPurchaserId;
    // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
    //"GetOrganizationNameByBranch", "BranchID")]
    @Transient
    private String OrgName;

    private  String IsOk;
    private  String IsOkNote;

    @Transient
    private List<PushBillDto> pushBillDto;


 @Override
 public void fixRelation() {
  super.fixRelation();
  for (FLSettleDetailInfo flSettleDetailInfo : FLSettleDetailInfos) {

   flSettleDetailInfo.setFlSettleSumInfo(this);

  }
  for (FLDiscountUsedInfo flDiscountUsedInfo : FLDiscountUsedInfos) {
   flDiscountUsedInfo.setSettleSumInfo(this);
  }
 }


 @Override
 public void fixBillID(String billID) {

  super.fixBillID(billID);

 }

 @Override
 public void softDelete(int flag) {
  super.softDelete(flag);

  for (FLSettleDetailInfo flSettleDetailInfo : FLSettleDetailInfos) {

   flSettleDetailInfo.setDeleteFlag(flag);

  }
  for (FLDiscountUsedInfo flDiscountUsedInfo : FLDiscountUsedInfos) {

   flDiscountUsedInfo.setDeleteFlag(flag);

  }

 }


}

子对象

package com.jzt.fl.upstream.basic.contracts.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.jzt.wotu.data.annotation.ChangedIgnore;
import fl.common.entity.BaseEntity;
import fl.common.entity.BaseFkEntity;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Objects;

/**
 *  缴款单/欠款单/还款单 子表
 * @Author lbc
 * @Date 9:21 2022/5/20
 **/
@Getter
@Setter
@Entity
@Table(name = "TB_FL_Settle_Detail")
public class FLSettleDetailInfo extends BaseEntity implements Serializable {

    private String branchId;
    
    /// <summary>
    ///	政策ID
    /// </summary>
    private  String PolicyId;
    /// <summary>
    ///	欠款单ID,还款单用,还的哪个欠款单
    /// </summary>
    private  String DebtId;
    /// <summary>
    ///	金额
    /// </summary>
    private BigDecimal Amount;

    private  String GroupNumberGuid;

    @ManyToOne(targetEntity = FLSettleSumInfo.class)
    @JoinColumn(name = "fk", referencedColumnName = "pk"/*updatable = true,insertable = true*/)
    @ChangedIgnore
    @JSONField(serialize = false)//nested exception is java.lang.StackOverflowError
    @JsonIgnore
    private FLSettleSumInfo flSettleSumInfo;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值