Does Specifying @Transactional rollbackFor Also Include RuntimeException

Alex Beardsley picture Alex Beardsley · Oct 11, 2012 · Viewed 30.3k times · Source
@Transactional(rollbackFor = MyCheckedException.class)
public void foo() {
    throw new RuntimeException();    
}

Will this transaction get rolled back, or do I need to include RuntimeException.class in the annotation as well?

Answer

deepakraut picture deepakraut · Oct 11, 2012

No need to include RuntimeException in rollbackFor list. It will handle that even if you do not mention it.

I've tried it out for jdbcTemplate:-

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = MyException.class)
public void updateSalary(final int increment){
    jdbcTemplate.update("update EMPLOYEE set emp_salary = emp_salary + ?", increment);
    throw new RuntimeException("update exception");
}
Output:
After Insertion:
1 Deepak 35000
2 Yogesh 35000
3 Aditya 35000

update exception
After Update
1 Deepak 35000
2 Yogesh 35000
3 Aditya 35000