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?

0

There are 0 best solutions below