Some database modifications involve several SQL queries, for example, inserting an object with attributes spread across several tables. If one of the queries fails, we would want to undo any previous ones that were successful.
Here are the steps to make DAO methods transactional:
Add
@EnableTransactionManagement
to the Spring configuration class:@Configuration @EnableWebMvc @EnableTransactionManagement @ComponentScan(basePackages = {"com.spring_cookbook.controllers", "com.spring_cookbook.dao"}) public class AppConfig { …
Add a
DataSourceTransactionManager
bean to the Spring configuration:@Bean public DataSourceTransactionManager transactionManager() { DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(); transactionManager.setDataSource(dataSource()); return transactionManager; }
Annotate the DAO class with
@Transactional
:@Repository @Transactional public class UserDAO { …