我正在使用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。