在我們使用@Transactional事務的註解的時候,如果用到try/catch,不可避免的會出現下面的這兩種情況:
try{
gameMapper.insertGame(game);
int a = 6/0;
gameMapper.findGameById(gameId);
}catch(Excetion e){
e.printStackTrace();
}
這段代碼會影響事務的,因爲事務默認是當發生RuntimeException的時候才能回滾。所以此時即便int a = 6/0;這行代碼錯誤,還是會插入數據到數據庫表中
try{
gameMapper.insertGame(game);
int a = 6/0;
gameMapper.findGameById(gameId);
}catch(Excetion e){
e.printStackTrace();
throw new RuntimeExcetion();
}
這段代碼則不會影響事務的回滾,因爲手動拋出了RuntimeException,所以第一行的插入數據自然也會被回滾,無法生效。