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;// 实际缴款单位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解决相关推荐
- Deadlock found when trying to get lock; try restarting transaction主要要是死锁问题呢怎么解决
目录 问题描述: 问题发生原因: 问题日志详情: 问题描述: 生产启动的时候,定期排查的 一些日志,发现一个问题呢,主要是加锁了,很奇怪,主要是业务数据的一般的CURD.至于其他的很奇怪!主要查看业务 ...
- Hibernate悲观锁/乐观锁
如果需要保证数据访问的排它性,则需对目标数据加"锁",使其无法被其它程序修改 一,悲观锁 对数据被外界(包括本系统当前的其它事务和来自外部系统的事务处理)修改持保守态度,通过数据库 ...
- Java分布式系统高并发解决方案
对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...
- (13) 悲观锁和乐观锁解决hibernate并发(转)
前言: 做项目时由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图书借阅系统.假设 id=1 的这本书库存为 1 ,但是有 2 个人同时来借这本书,此处的逻辑为 Select ...
- 框架学习之Hibernate 第十节 事务原理与分析
1.事务 两种事务: ① JDBC事务:单个数据库的事务 一个SesisonFactory对应一个数据库,使用 JDBC 实现 常用代码的模板: Session session = null;Tran ...
- Hibernate之悲观锁与乐观锁
http://blog.csdn.net/a19881029/article/details/20665663 如果需要保证数据访问的排它性,则需对目标数据加"锁",使其无法被其它 ...
- Hibernate锁定模式– OPTIMISTIC_FORCE_INCREMENT锁定模式如何工作
介绍 在我以前的文章中 ,我解释了OPTIMISTIC锁定模式是如何工作的,以及它如何帮助我们同步外部实体状态更改. 在本文中,我们将介绍OPTIMISTIC_FORCE_INCREMENT锁定模式的 ...
- Hibernate锁定模式– PESSIMISTIC_FORCE_INCREMENT锁定模式如何工作
介绍 在上 一篇 文章中 ,我介绍了OPTIMISTIC_FORCE_INCREMENT锁定模式,并将其应用于将子实体版本更改传播到锁定的父实体. 在本文中,我将介绍PESSIMISTIC_FORCE ...
- hibernate乐观锁_Hibernate Collection乐观锁定
hibernate乐观锁 介绍 Hibernate提供了一种乐观的锁定机制 ,即使长时间通话也可以防止更新丢失 . 结合实体存储,跨越多个用户请求(扩展的持久性上下文或分离的实体),Hibernate ...
- 休眠锁定模式– OPTIMISTIC_FORCE_INCREMENT锁定模式如何工作
介绍 在我以前的文章中 ,我解释了OPTIMISTIC锁定模式是如何工作的,以及它如何帮助我们同步外部实体状态更改. 在本文中,我们将介绍OPTIMISTIC_FORCE_INCREMENT锁定模式的 ...
最新文章
- 论坛报名 | AI 时代,新药研发真能告别「十年磨一剑」吗?
- 把html变成桌面的软件,5 分钟把任意网站变成桌面软件
- DevExpress.XtraReports报表,动态设置报表布局
- 2017年会是Serverless爆发之年吗?
- 初识Mysql(part19)--我需要知道的3条Mysql语句之组合查询
- centos7配置Docker镜像加速器
- 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集
- idea 热部署时 tomcat处 没有update classes and resource 选项
- 数据库多表查询之 where INNER JOIN
- RH850 问题及解决方案
- 图新地球为什么很模糊,白球、看图、下载问题深度剖析
- 5-1. 约分最简分式(15)
- 神奇的泡泡java游戏,抖音挤泡泡游戏叫什么名字 抖音上很火的减压游戏介绍
- 原生javascript实现拖拽改变table表格行高(html)
- 数据结构与算法-普利姆算法(Prim) | 尚硅谷韩顺平
- Kafka 2.8.0 学习
- MATLAB函数大全 .
- linux ksoftirqd进程,ksoftirqd进程导致cpu消耗殆尽
- 跨平台iOS自动化测试工具——tidevice
- JavaScript学习之旅-导言篇