具体场景:在并发的情况下,save函数的失效问题。

在实际工作中遇到该问题,当时挺苦恼的。为什么通过 save 保存的数据丢失了呢?

但是有时却能正确保存,这是怎么回事呢!!

情况描述

1. 服务A(简A) 通过服务B(简B) ,将账单C从A保存在B中,并保存在数据库中;

2.B对于传入的C,创建内部账单 -> 再创建第三方账单(save) -> 业务逻辑 -> 响应A;

3.A 在未接受到响应时,立即再次使用C向B发起请求;

4.预期:2条内部账单,2条第三方账单,但实际只有步骤3的第三方账单,步骤1丢弃掉了。

从上述情况,就可以看出。jpa 的 save != INSERT INTO 哦

分析1:第一次创建的第三方账单,使用C作为主键,将数据保存下来;

分析2:第二次创建时,使用C作为主键保存时,发现已经存在,则更新并替换数据。

源码:

事实: save 并没有失效,而是它具有插入和更新的能力。

办法1:使用明确的SQL , 执行Insert Into 语句,从本质上解决,后续被捕获异常。

办法2:通过锁的方式,先查询没有再save。(对于大量并发并不适用哦)

办法3:通过缓存中间件,例如 Redis 等,但弊端受限于网络。服务集群可以这样处理。

tips : 感谢收藏和关注的博友们哟~

JPA并发save失效相关推荐

  1. 缓存穿透、并发和失效的解决方案

    我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 缓存穿透 注:上面三个图会有什么问题呢? 我们在项目中使用缓存通常都是先检查缓 ...

  2. MySQL数据库建表时对于某个字段设置了默认值,但是使用Spring Data Jpa的save后默认值没有生效

    问题描述:MySQL数据库建表时对于某个字段设置了默认值,但是使用Spring Data Jpa的save后默认值没有生效.MySQL数据库中构建的用户表表结构如下所示: DROP TABLE IF ...

  3. SpringBoot实现JPA的save操作

      在一次参与公司的技术讨论会上,一位同事在演示SpringBoot的JPA的操作时,发现SpringBoot的JPA的save操作时,发现会先有select再insert,然后老板说,我们在网关已经 ...

  4. jpa SessionFactory事物失效

    前言: 因为项目中使用jpa的SessionFactory用@Autowired的方式来操作Hibernate的Session,死活开不了事物,最后终于在一篇博客的帮助下,了解到使用SessionFa ...

  5. 缓存穿透、缓存并发、缓存失效之思路变迁

    来源:https://www.jianshu.com/p/d96906140199 在用缓存的时候,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 一.缓存穿透 上面三个图会有什么问题呢 ...

  6. 二级缓存失效_缓存核心技术:缓存穿透、缓存并发、缓存失效之思路变迁

    在用缓存的时候,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 一.缓存穿透 上面三个图会有什么问题呢? 我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果 ...

  7. Spring Data Jpa中的save和saveAndFlush方法

    Spring Data Jpa中save和saveAndFlush的区别,首先直接看图: save是CurdRepository接口下的方法 saveAndFlush是JpaRepository接口下 ...

  8. JPA踩坑记:Spring Data Jpa 更新为null的问题(save方法保存时null值会被更新到数据库)

    关键字: JPA更新为null,JPA save null,JPA保存为null 今天使用jpa的save方法时发现null字段也会被更新到数据库,这个直接把数据库数据覆盖的行为很可怕,果断研究了一下 ...

  9. 使用sharding做分库分表,使用jpa,发生的save不报错,数据库缺插不进去数据的问题

    先讲讲问题的诞生,我们项目起初没有引进 sharding分库,而是在项目上线前,才做的分库分表.也就是之前的业务都写好的,所以知道业务代码没有任何问题. 然后引入 sharding 的相关的依赖以后, ...

  10. redis有值查询返回null_Redis缓存穿透、缓存并发、热点缓存之最佳招式

    一.前言 我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 缓存穿透 注: 上面三个图会有什么问题呢? 我们在项目中使用缓存通常 ...

最新文章

  1. pta函数统计素数并求和_黎曼的zeta函数
  2. Bash shell
  3. MySQL数据库自连接查询inner join ... on
  4. ue4加载本地版本_【虚幻4】创建本地数据库
  5. 2020-11-16(常见加密算法统计)
  6. E1. Rubik‘s Cube Coloring (easy version) 贪心,满二叉树(1300)
  7. Linux下V4L2捕捉画面+H264压缩视频+帧缓冲显示视频————H264压缩视频
  8. oracle dbwr trace文件,ORA-01157: cannot identify/lock data file 19 - see DBWR trace file问题处理...
  9. 看了一下lua的实现
  10. android 4.0 禁用系统home键
  11. [原]ActiveReport6 for net使用(一)
  12. Mysql Like 性能优化总结
  13. win10系统安装SQL Server2005中文版安装教程和下载地址(亲测成功)
  14. 人工智能究竟能否实现?
  15. 小程序心知天气API获取数据
  16. 大数据零基础学习并不难,从0到1你需要的不仅仅是努力!
  17. 微信小程序开发经验总结
  18. Qt开发之QLineEdit简单介绍
  19. 联想小新 mini 主机 评测
  20. 龙迅LT7911D Type-C/DP/eDP to MIPI DSI/CSI/LVDS 信号转换芯片

热门文章

  1. 用时一个半个月,七月刚入职字节跳动的测试开发面试题,内附答案
  2. 把小米盒子变成文件服务器,【教程】教你在小米电视、小米盒子上导出应用源文件分享!...
  3. 惠普(HP) LaserJet Pro M1136 MFP 黑白多功能激光一体机 (打印 复印 扫描)驱动安装记录
  4. 磁盘分区助手使用心得
  5. 解决 Winfrom richtextbox不显示RTF文档 图片问题
  6. 输入数字怎么变成大写python_用Python将数字转换为中文大写
  7. 摄氏度和开氏度的换算_摄氏度、华氏度和开氏度有何区别?
  8. 机器学习----深刻理解高斯过程回归
  9. 网页顶部广告展开与收起
  10. 电脑软件推荐安装列表