事務 與 try/catch的關係

 在我們使用@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,所以第一行的插入數據自然也會被回滾,無法生效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章