2019独角兽企业重金招聘Python工程师标准>>>

这段时间遇到一个 很奇怪的问题。而这个问题,其实一直都困扰着我,只是以前没有怎么去分析,以为是其他问题引起的。可是 这块代码重构时候老是出现问题,而且又不敢随便动,只好慢慢 分析研究了。

问题

情况是这样的, 在spring 事务方法里面, 保存一个 充值对象, 然后将 刚才的新的充值对象 查询出来,修改 里面的某些属性值。 这时候 并没有 执行更新语句,而且执行其他的对象操作更新保存了。 最后呢 ,发现 这个 对象为什么会 字段更新?又没有执行更新方法? 开始一直以为 是其他对象表关联了这个对象表,自动更新了。因为使用的 是 hibernate 。 可是后来分享的时候,发现一点关系没有。。。

代码

代码大概:// 充值 成功或者失败if (Objects.equals(result.getCode(), AllinpayConstant.SUCCESS_CODE)) {
// 记录充值前数据Recharge recharge = new Recharge();recharge.setReAccount(0d);// 以元为单位recharge.setRechargeAmount(Double.valueOf(tranAmt));recharge.setStatus(Recharge.STATUS_UNDO);recharge.setUserbasicsinfo(user);recharge.setRechargetype("1");// 个人网银recharge.setRechargeWay(Recharge.RECHARGEWAY_SHORTCUTPAY);recharge.setTime(DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));recharge.setOrderNum(reqNo);// 订单号就是 交易批次号rechargesService.rechargeSave(recharge);
....// 充值成功后的业务this.allinPayRechargeAfterDo(result, reqNo, userBank, tranAmtDecimal);。。。。。@Transactional(propagation = Propagation.REQUIRES_NEW) // 开启一个新的事务,如果之前有了一个事务,那么挂起public void allinPayRechargeAfterDo(AllinpayResult result, String reqNo, UserBank userBank,BigDecimal tranAmtDecimal) {
// 充值成功Recharge rechargeToSuccess = rechargesService.getRecharge(reqNo);// 查询出来rechargeToSuccess.setStatus(Recharge.STATUS_SUCCESSE);// 充值成功rechargeToSuccess.setReAccount(tranAmtDecimal.doubleValue());// 实际充值,以元为单位// 记录充值成功后相关流水rechargesService.rechargeReturn(rechargeToSuccess);
。。。。 

大概就是这样的情况

分析

其实是这样的, 因为这个方法的 前面的 插入数据的时候, 事务没有提交,而查询的时候 框架可以把自己事务里面未提交的数据给查询出来。 这时候 进行 修改属性值得时候。 事务提交了,就把 这个 充值对象 最新的 给拿出来 存入数据库里面了。 所以不需要 手动去更新了的。就是这样子的简单原因。 可以看到哪怕 更新的时候的 方法 标志使用了 一个新事务 @Transactional(propagation = Propagation.REQUIRES_NEW) 都是不可以避免的。对于 最外层的事务来说 ,都是一样可以控制的。

转载于:https://my.oschina.net/u/2419285/blog/1624233

spring 事务 对象保存之后,修改的时候,自动更新提交?相关推荐

  1. idea修改代码后没有重新编译_SpringBoot中实现代码修改之后的自动更新与热加载...

    在实际的开发过程中,我们经常修改代码之后,手动的重启项目,查看修改效果.那么有没有一种方式能够快速的.自动的帮我们将修改代码自动更新,避免手动重启,从而提高开发效率呢?是有的,对于这个功能很多人对功能 ...

  2. 2021.2版本idea maven修改pom关闭自动更新

    当我们无意修改了pom文件时,maven总是自动更新,会很浪费系统资源,所以想要改成需要更新的时候,手动更新 一,正常情况下如何刷新依赖? 当我们对pom.xml进行修改后,需要点击右上角出现的m按钮 ...

  3. Node.js中的express框架,修改内容后自动更新(免重启),express热更新

    有两个插件可以解决此问题:1)supervisor:2)nodemon. 今天我只讲supervisor如何安装.设置开机自动启动: 强调一下!用supervisor来启动nodejs,就不用用什么p ...

  4. postgresSQL 实现数据修改后,自动更新updated_date/ts等字段

    1. 需求说明: 实现MYSQL中有on update CURRENT_TIMESTAMP 2. 需求分析 由于数据库迁移需要将MYSQL中的数据迁移到postgresSQL中,由于MYSQL中有on ...

  5. vue项目保存代码后浏览器页面自动更新

    vue.config.js种添加如上红色色框内内容,其中8081替换为自己电脑的主机号

  6. 注册表修改时间时区自动更新状态

    打开时间自动更新 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters](time) "Type&q ...

  7. spring事务详解

    Spring事务总结 参考 首先,如果整个系统要能实现事务,需要两个方面: Spring开启了事务 MySQL 数据库默认使用支持事务的innodb引擎 1.什么是事务? 事务是逻辑上的一组操作,要么 ...

  8. Spring Data JPA 禁止自动更新

    公司的项目后台架构是SpringBoot + Spring Date JPA,采用MySQL数据库.在工作刚开始时就遇到了一个奇怪的现象.在采用Date JPA查询完数据库之后,若改变了查询出的对象属 ...

  9. oracle通过触发器自动更新表的修改时间

    Oracle通过触发器自动更新表的修改时间 在mysql里,我们通常在创建表时会设置一个创建时间(create_time)和一个修改时间(update_time),然后给创建时间设置默认值CURREN ...

最新文章

  1. 学术期刊因投稿者并非双一流高校作者而拒稿引热议!这算学历歧视吗?
  2. 【连载】Scala程序设计:Java虚拟机多核编程实战——简介
  3. python和java一样吗-Java与Python到底有什么区别和共同点详细对比
  4. Flutter Dart 安装在window系统
  5. 《象与骑象人》总结一
  6. leetcode121买卖股票的最佳时机
  7. 中国科技统计年鉴Excel版本(1991-2021年)
  8. 电力系统谐波分析代码
  9. 河北源达投顾:用专业教学,用智能解决选股烦恼
  10. w ndows 10关机快捷键,win10关机有什么快捷键 win10关机快捷键及使用小技巧【图文】...
  11. Git使用小技巧之挑拣合并
  12. Alexnet输入大小227x227能否调整,kernel_size偶数有什么影响。
  13. 智者务其实,愚者争虚名
  14. Linux硬盘分区方案与分区格式介绍
  15. 西科大计算机网络期末复习考点
  16. 什么是PaaS? 平台即服务的解释
  17. vite创建vue保姆级教程
  18. window本地代理及共享端口445修改
  19. java 基础知识学习2
  20. 微信小程序毕业设计 基于微信体育馆场地预约小程序系统开题报告

热门文章

  1. AI算法效率每16个月提速一倍,算力革命超越摩尔定律
  2. 为什么机器学习模型在生产中会退化?
  3. 谷歌被指骗取人脸数据:部分获取方法可疑
  4. 百倍提升张量计算:谷歌开源TensorNetwork
  5. 人工智能的爆点来临,这些金科玉律先得掌握
  6. 使用元学习和推理改善您的模型!
  7. 搜索Idiot就出现特朗普图片,算法无罪!
  8. 赛迪展望 | 一文了解“2021年中国先进计算产业发展趋势”
  9. 院士论坛|李德仁:测绘遥感能为智能驾驶做什么? ——论测绘遥感与智能驾驶
  10. 重磅!中国微纳机器人技术取得新突破,实现肿瘤的可视化精准治疗!