"In its default configuration, the Spring Framework's transaction infrastructure code only marks a transaction for rollback in the case of runtime, unchecked exceptions; that is, when the thrown exception is an instance or subclass of RuntimeException. (Errors will also - by default - result in a rollback). Checked exceptions that are thrown from a transactional method do not result in rollback in the default configuration."
1. default rollback for unchecked exceptions
2. Errors will also - by default - result in a rollback
So recommend specifying rollback for Excpetion class.