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;// 实际缴款单位IDprivate  String ActPayId;//实际缴款单位private  String ActPayName;//缴款人private  String ActPayPerson;//收取形式,见收取形式字典private  String PayWay;//收取形式,见收取形式字典// [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",//"GetDictItemName", "PayWay", "CollectType")]@Transientprivate  String PayWayName;//金额private BigDecimal PayAmount;//票折单号private  String Bill2No;//票折票号private  String InvoiceNo;//实收类型IDprivate  String ActIncomeTypeId;//    实收类型// [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",//"GetDictItemName", "ActIncomeTypeId", "DraftItemType")]@Transientprivate  String ActIncomeTypeName;//有无折扣证明,1是,0否,默认0private  Integer IsEvidence;//开票项目IDprivate  String InvoiceProjId;// 开票项目ID// [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",//"GetDictItemName", "InvoiceProjId", "DraftItemType")]@Transientprivate  String InvoiceProjName;//票据类型private  String InvoiceType;//票据类型@Transientprivate  String InvoiceTypeName;//缴税标识private  String TaxIdentify;//    缴税标识@Transientprivate  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)@Cascadeprivate 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)@Cascadeprivate  Set<FLDiscountUsedInfo> FLDiscountUsedInfos = new HashSet<>();//       // [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",
//                             //"GetPactValueByFileName", "FK", "PactYear")]@Transientprivate String PactYear;// [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",//"GetPactValueByFileName", "FK", "PactBillId")]@Transientprivate String PactBillId;// [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",//"GetPactValueByFileName", "FK", "CustNo")]@Transientprivate String CustNo;// [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",//"GetPactValueByFileName", "FK", "CustName")]@Transientprivate String CustName;// [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",//"GetPactValueByFileName", "FK", "CustID")]@Transientprivate String PactCustID;// [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",//"GetPactValueByFileName", "FK", "PactPurchaser")]@Transientprivate String PactPurchaser;// [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",//"GetPactValueByFileName", "FK", "PactPurchaserId")]@Transientprivate String PactPurchaserId;// [LookupQuery("JZTFL.Common.Shared.Interfaces.ILookupQueryService, JZTFL.Common.Shared.Interfaces",//"GetOrganizationNameByBranch", "BranchID")]@Transientprivate String OrgName;private  String IsOk;private  String IsOkNote;@Transientprivate List<PushBillDto> pushBillDto;@Overridepublic void fixRelation() {super.fixRelation();for (FLSettleDetailInfo flSettleDetailInfo : FLSettleDetailInfos) {flSettleDetailInfo.setFlSettleSumInfo(this);}for (FLDiscountUsedInfo flDiscountUsedInfo : FLDiscountUsedInfos) {flDiscountUsedInfo.setSettleSumInfo(this);}}@Overridepublic void fixBillID(String billID) {super.fixBillID(billID);}@Overridepublic 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@JsonIgnoreprivate FLSettleSumInfo flSettleSumInfo;}

Row was updated or deleted by another transaction or unsaved-value mapping was incorrect解决相关推荐

  1. Deadlock found when trying to get lock; try restarting transaction主要要是死锁问题呢怎么解决

    目录 问题描述: 问题发生原因: 问题日志详情: 问题描述: 生产启动的时候,定期排查的 一些日志,发现一个问题呢,主要是加锁了,很奇怪,主要是业务数据的一般的CURD.至于其他的很奇怪!主要查看业务 ...

  2. Hibernate悲观锁/乐观锁

    如果需要保证数据访问的排它性,则需对目标数据加"锁",使其无法被其它程序修改 一,悲观锁 对数据被外界(包括本系统当前的其它事务和来自外部系统的事务处理)修改持保守态度,通过数据库 ...

  3. Java分布式系统高并发解决方案

    对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...

  4. (13) 悲观锁和乐观锁解决hibernate并发(转)

    前言:  做项目时由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图书借阅系统.假设 id=1 的这本书库存为 1 ,但是有 2 个人同时来借这本书,此处的逻辑为 Select ...

  5. 框架学习之Hibernate 第十节 事务原理与分析

    1.事务 两种事务: ① JDBC事务:单个数据库的事务 一个SesisonFactory对应一个数据库,使用 JDBC 实现 常用代码的模板: Session session = null;Tran ...

  6. Hibernate之悲观锁与乐观锁

    http://blog.csdn.net/a19881029/article/details/20665663 如果需要保证数据访问的排它性,则需对目标数据加"锁",使其无法被其它 ...

  7. Hibernate锁定模式– OPTIMISTIC_FORCE_INCREMENT锁定模式如何工作

    介绍 在我以前的文章中 ,我解释了OPTIMISTIC锁定模式是如何工作的,以及它如何帮助我们同步外部实体状态更改. 在本文中,我们将介绍OPTIMISTIC_FORCE_INCREMENT锁定模式的 ...

  8. Hibernate锁定模式– PESSIMISTIC_FORCE_INCREMENT锁定模式如何工作

    介绍 在上 一篇 文章中 ,我介绍了OPTIMISTIC_FORCE_INCREMENT锁定模式,并将其应用于将子实体版本更改传播到锁定的父实体. 在本文中,我将介绍PESSIMISTIC_FORCE ...

  9. hibernate乐观锁_Hibernate Collection乐观锁定

    hibernate乐观锁 介绍 Hibernate提供了一种乐观的锁定机制 ,即使长时间通话也可以防止更新丢失 . 结合实体存储,跨越多个用户请求(扩展的持久性上下文或分离的实体),Hibernate ...

  10. 休眠锁定模式– OPTIMISTIC_FORCE_INCREMENT锁定模式如何工作

    介绍 在我以前的文章中 ,我解释了OPTIMISTIC锁定模式是如何工作的,以及它如何帮助我们同步外部实体状态更改. 在本文中,我们将介绍OPTIMISTIC_FORCE_INCREMENT锁定模式的 ...

最新文章

  1. 论坛报名 | AI 时代,新药研发真能告别「十年磨一剑」吗?
  2. 把html变成桌面的软件,5 分钟把任意网站变成桌面软件
  3. DevExpress.XtraReports报表,动态设置报表布局
  4. 2017年会是Serverless爆发之年吗?
  5. 初识Mysql(part19)--我需要知道的3条Mysql语句之组合查询
  6. centos7配置Docker镜像加速器
  7. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集
  8. idea 热部署时 tomcat处 没有update classes and resource 选项
  9. 数据库多表查询之 where INNER JOIN
  10. RH850 问题及解决方案
  11. 图新地球为什么很模糊,白球、看图、下载问题深度剖析
  12. 5-1. 约分最简分式(15)
  13. 神奇的泡泡java游戏,抖音挤泡泡游戏叫什么名字 抖音上很火的减压游戏介绍
  14. 原生javascript实现拖拽改变table表格行高(html)
  15. 数据结构与算法-普利姆算法(Prim) | 尚硅谷韩顺平
  16. Kafka 2.8.0 学习
  17. MATLAB函数大全 .
  18. linux ksoftirqd进程,ksoftirqd进程导致cpu消耗殆尽
  19. 跨平台iOS自动化测试工具——tidevice
  20. JavaScript学习之旅-导言篇

热门文章

  1. windows机器硬盘不能超过2T详解及图文破解方法
  2. html注册新浪邮箱代码,新浪博客美化代码:邮箱快速登录
  3. 2020年最新PHP面试题汇总(附答案)
  4. 初次创建andriod项目出现的问题
  5. Verilog数码显示器00~99循环计数器电路
  6. 1.list倒叙输出
  7. windows server 2008 R2 怎么集成USB3.0驱动
  8. 网页编程----HTML网页编程
  9. Android控件详解之网格控件
  10. java毕业设计——基于java+AngularJS+jsp的配件营销系统设计与实现(毕业论文+程序源码)——配件营销系统