塔卡库橘 2021-10-06 16:00 采纳率: 0%
浏览 24

Java事务未提交,在开发测试环境中可以先update后获取到更新的值,但是发到正式环境时直接就不可以了

一开始进来是先把明细的金额数据置空:

            //更新该单据下的明细相关预收金额为空
            int row = saleDetailMapper.updateAomuntZERO(saleMain.getId());

            SaleDetail saleDetail = new SaleDetail();
            saleDetail.setSaleId(saleMain.getId());
            saleDetail.setDelflag(DeleteFlag.VALID.getCode());
            List<SaleDetail> list = saleDetailMapper.findList(saleDetail);
            if(list == null || list.size() == 0){
                // 手动回滚
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                result.put(SystemKey.ERROR_KEY, "该单据没有明细");
                return  result;
            }

接着在list中for循环中重新分配金额 ,分配逻辑有的长,略过。
之后由这些重新汇总金额:

       <update id="updateDiscountAmount">
        UPDATE `sm_sale_main`
        SET
          discountAmount =
          (SELECT SUM(IFNULL(detail.offsetAmount, 0))  FROM `sm_sale_detail` detail  WHERE detail.`delflag` = 1 AND detail.`saleId` = #{id} )
        WHERE id = #{id}
    </update>

自己在写的的时候测试过,在开发环境中就是怎样测试都是正常的,然后一发正式,最后那个更新直接就一直为0。
我这里的update和select是同一个事务,正常应该是不存在隔离的。然后我就是怎样都更新不了,只好把最后一个更新去掉了,在for前定义一个变量去合计后再更新。这里的这个事务求哪个朋友能解惑一下,感谢。

  • 写回答

2条回答 默认 最新

  • 关注

    重新分配金额的数据有没有写到数据表里面呢?是否提交了commit事务。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月6日

悬赏问题

  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 游戏盾如何溯源服务器真实ip?
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL
  • ¥15 抖音看过的视频,缓存在哪个文件
  • ¥15 自定义损失函数报输入参数的数目不足
  • ¥15 如果我想学习C大家有是的的资料吗