首页 > 其他分享 >数据隔离级别查询一致导致重复退款

数据隔离级别查询一致导致重复退款

时间:2024-07-20 13:54:34浏览次数:16  
标签:orderReturnDb updateReturn OrderReturn no 查询 log 退款 隔离

@Transactional
	public void updateAfsState() {

		String no = "500001880002";
		OrderReturn orderReturnDb = orderReturnModel.getOrderReturnByAfsSn(no);
		log.info("1.该售后单状态:{}" , orderReturnDb.getState());
		if(orderReturnDb.getState().equals(OrdersAfsConst.RETURN_STATE_300)){
			log.error("怡亚通:完成售后时,该售后单已经是完成状态了:{}" , no);
			return;
		}

		//更新退货表
		OrderReturn updateReturn = new OrderReturn();
		updateReturn.setReturnId(orderReturnDb.getReturnId());
		updateReturn.setState(OrdersAfsConst.RETURN_STATE_300);
		updateReturn.setCompleteTime(new Date());
		int update = orderReturnWriteMapper.updateByPrimaryKeySelective(updateReturn);

		OrderReturn orderReturnDb2 = orderReturnModel.getOrderReturnByAfsSn(no);
		log.info("2.该售后单状态:{}" , orderReturnDb2.getState());

		log.info("===========");

	}

第一次查询打印状态 200

然后更新数据,没有使用来的的对象

第二次查询打印状态也是 200

虽然没有查询Mybatis一级缓存,但是因为MySql 默认的数据隔离级别是可重复读,更新语句还没提交,所以查询出来依然状态 还是200。

解决方法:

1.加上分布式锁,在第一次查询数据前加锁。

2.在另一个类进行更新,

@Transactional 设置 PROPAGATION_REQUIRES_NEW .

有兴趣的同学可以试试。

 

标签:orderReturnDb,updateReturn,OrderReturn,no,查询,log,退款,隔离
From: https://blog.csdn.net/DS_Watson/article/details/140570297

相关文章

  • idea内置数据库DataGrip + 多表查询sql语句 -- 内连接与外连接
    多表查询内连接与外连接--——————————多表查询--用的是多表设计中一对多的表与数据--单表select*fromtb_dept;select*fromtb_emp;--多表select*fromtb_emp,tb_deptwheretb_emp.dept_id=tb_dept.id;--==============内链接没有联系的查......
  • Spring Book Club + java查询数据库 + 百万数据 + 同步Elasticsearch(ES)+ 多线程 + Fei
    @FeignClient(name="bwie-elastic")publicinterfaceEsFeign{@PostMapping("/add")publicResultadd(@RequestBodyArrayList<ResourceInfo>resourceInfo);}@RestControllerpublicclassUserControllerimplementsApplica......
  • loki的日志查询
    执行简单查询获取特定标签相关的日志{container="..."}标签过滤器,用于获取指定容器的所有日志{container="..."}|=`status`带有行过滤器的标签过滤器,用于获取指定容器上含有“status”字串的日志行{container="..."}|json|status=`404`获取指定容器上的json格式的日......
  • Docker群晖docker查询注册表失败
    解决群晖NASUI(或SSH中)的dockerpull错误(无法拉取,注册表错误)朗读全文Yourbrowserdoesnotsupporttheaudioelement.有什么用errorpullingimageconfiguration:Get"https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/...dialtcp......
  • 20240719数据库关联查询、条件查询
    mysql关联外键查询商品表和图片表是分开的,用一张商品图片表关联起来了。查询商品表所有字段和图片信息。其余的,商人id、区域id、分类id都是直接关联,没有中间表SELECTp.id,p.name,p.price,p.unit,f.file,p.description,p.is_on_sale,p.......
  • oracle数据库状态查询
    oracle数据库状态查询(表空间,表空间利用率,是否自动扩展,IOPS,MBPS,数据库总大小)排除了('SYSAUX','USERS','SYSTEM','UNDOTBS1')结果示例--查询用户自定义表空间的使用信息WITHuser_tablespacesAS(SELECTDISTINCTtablespace_nameFROMdba_segmentsWHERE......
  • 论如何直接用EF Core实现创建更新时间、用户审计,自动化乐观并发、软删除和树形查询(下)
    前言数据库并发,数据审计和软删除一直是数据持久化方面的经典问题。早些时候,这些工作需要手写复杂的SQL或者通过存储过程和触发器实现。手写复杂SQL对软件可维护性构成了相当大的挑战,随着SQL字数的变多,用到的嵌套和复杂语法增加,可读性和可维护性的难度是几何级暴涨。因此如何在实......
  • 流式查询2、mybatis的ResultHandler 每次查询返回定义的500条
    流式查询2、mybatis通过用ResultHandler流式查询,每次查询返回定义的500条,再去批量处理(可异步并发):packagecom.aswatson.cdc.redis.schedule;importcom.aswatson.cdc.redis.common.lock.DistLock;importcom.aswatson.cdc.redis.common.lock.DistLockRegistry;importcom.as......
  • SQL Server 使用 OPTION (RECOMPILE) 和查询存储的查询
    设置        我们正在使用WideWorldImporters数据库,您可以从Github下载【sql-server-samples/samples/databases/wide-world-importersatmaster·microsoft/sql-server-samples·GitHub】。我正在运行SQLServer2017的最新CU【https://sqlserverbuilds.......
  • 论如何直接用EF Core实现创建更新时间、用户审计,自动化乐观并发、软删除和树形查询(中)
    前言数据库并发,数据审计和软删除一直是数据持久化方面的经典问题。早些时候,这些工作需要手写复杂的SQL或者通过存储过程和触发器实现。手写复杂SQL对软件可维护性构成了相当大的挑战,随着SQL字数的变多,用到的嵌套和复杂语法增加,可读性和可维护性的难度是几何级暴涨。因此如何在实......