【发布时间】:2017-07-31 21:29:26
【问题描述】:
我有两种方法如下所示。
@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() 开始的整个事务被回滚,由以下异常
org.springframework.transaction.UnexpectedRollbackException: 事务回滚,因为它已被标记为仅回滚
我知道这是 spring @Transactional 注解的默认行为。
就我而言,即使有EmptyResultDataAccessException,我也需要提交事务。由于EmptyResultDataAccessException 是RuntimeException,我不能使用@Transactional 注释的noRollBackFor 属性。
谁能提出解决方案?
【问题讨论】:
-
一个快速的解决方案是让 EmptyResultDataAccessException 成为检查异常,因为 spring 在检查异常的情况下不会回滚。
标签: java spring transactions spring-jdbc spring-transactions