我试图执行交易代码示例。我从事务方法抛出checked异常,并为此异常的类设置rollbackFor参数。但是,此事务不会回滚。所以我的问题是这种行为可能是什么原因。以下是我的代码示例:
为MyService:
@Service
@Transactional
@EnableTransactionManagement
public class MyService implements IMyService {
@Autowired
private IMyDao myDao;
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = BreakException.class)
public void test() throws BreakException {
myDao.updateMethodA("64", "'N'", "'2015.01.01/0008661/0008'");
if(true) throw new BreakException();
myDao.updateMethodB("15", "'N'", "'2015.01.01/0008661/0008'");
}
}
MyDao:
@Repository
public class MyDao implements IMyDao {
@Override
@Transactional(propagation=Propagation.MANDATORY)
public void updateOperationA(String x, String y, String z) {
String sql = "UPDATE ...."; //masked for example
jdbcTemplate.update(sql);
}
@Override
@Transactional(propagation=Propagation.MANDATORY, rollbackFor = Exception.class)
public void updateOperationB(String saldoPo, String saldo_status, String unikalne_id) throws BreakException {
String sql = "UPDATE ...."; //masked for example
//if(true) throw new BreakException();
jdbcTemplate.update(sql);
}
}
1。)因此,当我在MyService上调用test()时,抛出BreakException()后,方法updateMethodA的更新不会回滚。
2。)BreakException是我的类,它扩展了Exception
3.。)当我从updateOperationB抛出BreakException时(在示例中注释),它确实正确回滚。
4。)当我更改BreakException以扩展TransactionException时,它按预期工作,所以看起来问题只是在我扩展Exception时。