@Transactional回滚异常
今天调试的时候出了个问题,搜了半天没有找到解决方案:
代码如下:
try {
GameRecord newRecord = new GameRecord(phaseCode, clientComParam.getUserId());
gameRecordDao.save(newRecord);
logger.info("Check QR Code successfully");
} catch (Exception e) {
if(e.getClass().equals(DataIntegrityViolationException.class)){
serverComParam.setContentCode(ResponseCode.CONT_DUPLICATE_PHASE_CODE.getCode());
serverComParam.setContentDesc(ResponseCode.CONT_DUPLICATE_PHASE_CODE.getErrorMsg());
logger.warn("/checkQRCode, [Error]: Phase duplicated.");
return JSON.toJSONString(serverComParam);
}else {
throw e;
}
}
按照我的理解,方法中的异常如果被try catch到了,并且没有重新作为runtimeException被抛出,事物就检测不到这个异常所以也不会回滚?但是debug的时候运行到加粗的return语句就报错说:
Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly,...
各位大佬。。这是什么原因?return语句会影响transaction检查异常吗