When recent Spring Boot 2.5 release, my project can't call any service method with error: Could not obtain transaction-synchronized Session for current thread It works fine with 2.4.x.
SystemConfig.java:
@Bean
public LocalSessionFactoryBean sessionFactory() throws PropertyVetoException {
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource());
sessionFactoryBean.setPackagesToScan("qi.ruibu.model");
Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.dialect",
"org.hibernate.dialect.PostgreSQL10Dialect");
hibernateProperties.setProperty("hibernate.show_sql", "false");
hibernateProperties.setProperty("hibernate.autoReconnect", "true");
hibernateProperties.setProperty("hibernate.query.substitutions", "true 1, false 0");
sessionFactoryBean.setHibernateProperties(hibernateProperties);
return sessionFactoryBean;
}
@Bean
public HibernateTransactionManager txManager() throws PropertyVetoException {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory().getObject());
return txManager;
}
BaseDaoImpl.java
private SessionFactory sessionFactory;
@Override
public SessionFactory getSessionFactory() {
return sessionFactory;
}
@Override
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
private Session getCurrentSession() {
if (sessionFactory.getCurrentSession() == null) {
sessionFactory.openSession();
}
return sessionFactory.getCurrentSession();
}
xxxServiceImpl.java
Query query = baseDao.getSessionFactory().getCurrentSession().createQuery(hql); // error