ну это как раз не имеет никакого значения - сами вы его написали или нет.
важно, выкидывается ли оно из метода, над которым у вас стоит @Transactional(rollbackFor=Exception.class) или вы его ловите и обрабатываете в этом методе, и стало быть выше оно уже не кидается.
так же важно, как вы вызываете метод, на котором стоит @Transactional(rollbackFor=Exception.class), может вы его из другого метода этого же бина дергаете без прокси.
да мало ли причин может быть. никто так не скажет.
включите уровень логирования DEBUG для логгера org.springframework.jdbc и смотрите, в какие моменты у вас транзакция коммитится/ролбечится относительно другого вашего кода.