Spring Transaction not rolling back

java, rollback, spring, spring-transactions

Solution

you need to pass `rollbackFor` parameter with type of your checked exception. It seems that spring rollbacks only on unchecked exceptions by default. More details: Spring transaction: rollback on Exception or Throwable

Problem

I have something like this: ``` @Service @Transactional public class ServiceA { @Autowired SomeDAO1 dao1; @Autowired ServiceB serviceB; public void methodServiceA() { serviceB.someMethodThatRunsInsertIntoDB(); dao1.anotherMethodThatRunsInsertIntoDB(); } } @Service @Transactional public class ServiceB { @Autowired Dao2 dao2; public void someMethodThatRunsInsertIntoDB() { dao2.insertXXX(); } } ``` My problem is: if `serviceB.someMethodThatRunsInsertIntoDB()` executes sucessfully but `dao1.anotherMethodThatRunsInsertIntoDB()` throw an exception, the changes made by `serviceB` are not rolled back. I need to rollback those changes in case an exception occur in `dao1.anotherMethodThatRunsInsertIntoDB()`. How can I do this? // EDITED Transaction configuration in spring-servlet.xml ``` <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> <property name="jpaDialect"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> </property> </bean> ``` Is it relevant if one dao uses an EntityManager and the other dao uses JdbcTemplate to interact with DB? //UPDATE -- EntityManager configuration ``` <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="true" /> <property name="generateDdl" value="true" /> </bean> </property> ```

Original source

Related problems