0
我有兩種方法如下所示。Spring:Caught EmptyResultDataAccessException導致整個事務回滾
@Transactional
public void methodA(){
logger.trace("Executing methodA");
methodB()
logger.trace("Executing methodA completed");
}
public void methodB(){
//other codes here
try{
staffDao.queryById(1) //Fetch a record from database
}catch(EmptyResultDataAccessException e){
logger.trace("Staff does not exists")
}
//other codes here
}
當發生內methodB()
的EmptyResultDataAccessException
,整個事務上methodA()
開始被rollbacked,通過以下例外
org.springframework.transaction.UnexpectedRollbackException: 事務回滾,因爲它已經標記爲僅回滾
我知道這是spri的默認行爲ng @Transactional
註釋。
對於我的情況,即使存在EmptyResultDataAccessException
,我也需要提交交易。由於EmptyResultDataAccessException
是RuntimeException
,因此我無法使用@Transactional
註釋的noRollBackFor
屬性。
任何人都可以提出解決方案嗎?
一個快速的解決方案可以使EmptyResultDataAccessException檢查異常,如春不檢查的異常的情況下,回滾。 – pkoli