Spring Boot 2.5 Hibernate错误:无法获取当前线程的事务同步会话



在最近的Spring Boot 2.5版本中,我的项目无法调用任何服务方法,并出现错误:无法获取当前线程的事务同步会话它适用于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

请添加@Repository@Transactional

经过一天的尝试和搜索,我终于找到了原因:包命名空间是错误的

春季启动2.5

@Transactional应使用导入org.springframework.transaction.annation.Transactional;

而不是import javax.transaction.Transactional;

现在一切都很好。

最新更新