在我們使用@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,是以第一行的插入資料自然也會被復原,無法生效。