It seems like Spring is unable to find the JpaTransactionManager bean that I have created inside my DBConfig class.
DBConfig class:
@Configuration
@EnableTransactionManagement
class DBConfig{
private LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean;
public LocalContainerEntityManagerFactoryBean getLocalContainerEntityManagerFactoryBean(String DBType, String DBServerName){
localContainerEntityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
Properties properties = new Properties();
properties.put("hibernate.dialect", "org.hibernate.dialect.DB2Dialect");
properties.put("hibernate.show_sql", true);
properties.put("hibernate.jdbc.batch_size", 5000);
properties.put("hibernate.hbm2ddl.auto", "");
properties.put("hibernate.id.new_generator_nappings", false);
localContainerEntityManagerFactoryBean.setJpaProperties (properties);
localContainerEntityManagerFactoryBean.setPackagesToScan ("**");
localContainerEntityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
localContainerEntityManagerFactoryBean.setDataSource(DBType.equals("MSSQL") ? getMSSQLDataSource (DBServerName): getDB2DataSource (DBServerName));
LocalContainerEntityManagerFactoryBean.setPersistenceUnitName("PERSISTENCE_UNIT");
localContainerEntityManagerFactoryBean.afterPropertiesSet();
return localContainerEntityManagerFactoryBean;
}
public EntityManagerFactory getEntityManagerFactory(){
return localContainerEntityManagerFactoryBean.getObject();
}
@Bean("myTransactionManager")
public JpaTransactionManager myTransactionManager() {
LocalContainerEntityManagerFactoryBean lc = getLocalContainerEntityManagerFactoryBean( "DB2", "<DB_SERVER_NAME>");
return new JpaTransactionManager(lc.getObject());
}
}
When I am trying to execute a delete query as a transaction in my Test class, it is throwing Javax.persistence.TransactionRequiredException: Executing an update/delete query
Test class:
@Component
public class Test {
@Autowired
private DBConfig dbConfig;
@Transactional("myTransactionManager")
public void test() {
Query query = dbConfig.getEntityManagerFactory().createEntityManager().createNativeQuery("<Some Delete Query>");
query.executeUpdate(); // Error: Javax.persistence.TransactionRequiredException: Executing an update/delete query
}
}
What am I doing wrong?