【发布时间】:2021-08-10 22:09:00
【问题描述】:
当最近的 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
【问题讨论】:
标签: spring-boot hibernate