我正在學習Spring,並且在Spring中我遇到了一些與事務有關的問題。在Spring中發生異常時的事務回滾
這裏是我的代碼
@Transactional(rollbackFor = Exception.class)
public void createGroupStudent(Student A,Student B,String nameGroup){
try{
//create Group
createGroup(nameGroup);
//createMember
createMember(A,B);
}catch(Exception e){
logger.error(e.getMessage());
}
}
@Transactional(rollbackFor = Exception.class)
public void createGroup(String nameGroup){
try{
repoGroup.save(nameGroup);
}catch(Exception e){
logger.error(e.getMessage());
}
}
@Transactional(rollbackFor = Exception.class)
public void createMember(Student A,Student B){
try{
// function will throw a kind of Exception involve to " error constraint sql oracle " .
//It's my intended
repoMember.save(A,B);
}catch(Exception e){
logger.error(e.getMessage());
}
}
問題是,當功能createMember()
拋出異常,事務回滾送花兒給人爲什麼?我無法理解發生了什麼!我添加了嘗試,抓住每種方法,但它沒有奏效。
雖然方法createMember()
保存到數據庫(這裏我使用函數saveAndFlush()
)有麻煩。我知道它,我發現了這個異常。父母交易createGroupStudent()
認爲自己沒有問題並提交交易。但是當再次提交方法createMember()
會中斷並拋出Exception.I認爲方法createGroup()
不會回滾。但實際上,這個函數回滾了,所有的事務都是回滾的?發生了什麼?。
我正在使用atomikos事務。
非常感謝
感謝。但是,當我發現任何例外。事務仍然回滾?我不明白@。@。 –
你是如何檢查事務是否回滾的?這可能是交易沒有承諾。檢查你的配置。 – Adi
我認爲,雖然方法createMember()在保存到數據庫時遇到了麻煩(這裏我使用函數'saveAndFlush()')。我知道這一點,我發現了這個例外。 Prarent事務createGroupStudent()認爲它本身沒有問題並提交事務。但是,當再次提交方法createMember()將打破並拋出異常。我認爲createGroup()方法不會回滾。但實際上,這個函數是回滾的,所有的事務都是回滾的?發生了什麼 ???? 。這是我的問題:(我正在使用atomikos事務 –