私は以下の2つの方法を示します。春: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
は、トランザクション全体が
org.springframework.transaction.UnexpectedRollbackException以下の例外で、
methodA()
上で開始されたロールバックが発生します。それはされているので、 トランザクションがロールバックロールバックのみと指定
これはspriのデフォルト動作ですng @Transactional
注釈。
私の場合、EmptyResultDataAccessException
がある場合でもトランザクションをコミットする必要があります。 EmptyResultDataAccessException
はRuntimeException
なので、noRollBackFor
という属性の@Transactional
注釈は使用できません。
誰も解決策を提案できますか?
。 – pkoli