У меня есть подпружиненная программа, которая успешно запускает задания, которые пытаются записать данные в базу данных SQL с помощью HibernateItemWriter. Однако код гибернации завершается неудачно, потому что транзакция никогда не запускается:
org.hibernate.HibernateException: contains is not valid without active transaction
Я настроил HibernateTransactionManager, который, как я думал, должен был позаботиться об этом, но проблема сохраняется. Может быть, мои весенние конфигурации еще выключены? Вот соответствующий код из файла конфигурации:
BatchConfig.java
@Configuration
@EnableBatchProcessing
@EnableTransactionManagement
public class BatchConfig {
@Bean
public LocalSessionFactoryBean sessionFactory(){
final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setAnnotatedClasses(Student.class);
sessionFactory.setHibernateProperties(getProperties());
try {
sessionFactory.afterPropertiesSet();
} catch (IOException e) {
e.printStackTrace();
}
return sessionFactory.getObject();
}
@Bean
public HibernateTransactionManager transactionManager() {
final HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory());
transactionManager.setDataSource(dataSource());
return transactionManager;
}
@Bean
public ItemWriter<Student> studentItemWriter() {
HibernateItemWriter<Student> writer = new HibernateItemWriter<Student>();
writer.setSessionFactory(sessionFactory());
return writer;
}
}