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前定义一个变量去合计后再更新。这里的这个事务求哪个朋友能解惑一下,感谢。

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

DeleteFlag一般情况下1表示删除,0表示未删除。

select的时候
saleDetail.setDelflag(DeleteFlag.VALID.getCode());//DeleteFlag.VALID是0?
最后update的时候WHERE detail.delflag = 1是什么意思?
select和update的数据不一样?