为什么sqlsession事务在mybatis中不起作用?

时间:2019-08-23 06:15:28

标签: mybatis

我正在使用sqlsession进行这样的事务(MySQL v5.7.26):

         @Override
            public WalletLockedRecord lock(UserLockInfo userLockInfo) {
                // open transaction
                SqlSession sqlSession = sqlSessionFactory.openSession(false);
                try {
                    // do something in this place
                    WalletRecordMapper recordMapper = sqlSession.getMapper(WalletRecordMapper.class);
                    Integer result = recordMapper.updateByPrimaryKey(walletRecord);

                    WalletLockedRecord lockedRecord = new WalletLockedRecord();
                    lockedRecord.setLockedAmount(userLockInfo.getAmount());
                    lockedRecord.setAppId(userLockInfo.getAppId());
                    lockedRecord.setLockedType(userLockInfo.getLockedType().name());
                    lockedRecord.setRoomPlayId(userLockInfo.getRoomPlayId());
                    lockedRecord.setUserId(userLockInfo.getUserId());
                    lockedRecord.setLockedKey(UUID.randomUUID().toString());
                    lockedRecord.setBizId(userLockInfo.getBizId());
                    WalletLockedRecordMapper lockedRecordMapper = sqlSession.getMapper(WalletLockedRecordMapper.class);
                    lockedRecordMapper.insertSelective(lockedRecord);
                    // insert record failed in this place and throw exception
                    lockRecordHostory(lockedRecord, WalletLockedOperateType.LOCKED,sqlSession);

                    sqlSession.commit();
                    return lockedRecord;
                } finally {
                    if (sqlSession != null) {
                        sqlSession.close();
                    }
                }
            }

问题是:在lockRecordHostory函数中引发异常时,更新未回滚,为什么事务无法正常工作,我使用的是相同的sqlsession。

0 个答案:

没有答案