Spring Boot整合Hibernate实例化LocalSessionFactoryBean空指针异常
Spring Boot集成Hibernate sessionFactory空指针异常修复方案
错误定位
报错核心为com.att.dmp.DBConfiguration中定义的sessionFactory Bean实例化失败,LocalSessionFactoryBean的工厂方法执行过程中抛出java.lang.NullPointerException,以下所有方案均为Java配置实现,无XML配置方案。
排查修复步骤
- 检查DBConfiguration类的注解与依赖注入逻辑
确保类上添加了@Configuration注解,sessionFactory方法上添加了@Bean注解,方法依赖的DataSource、配置环境类等对象全部通过@Autowired或者构造函数注入,禁止手动new对应实例。正确的sessionFactory配置示例如下:@Configuration public class DBConfiguration { // 注入Spring自动配置的数据源,不要手动创建 @Autowired private DataSource dataSource; @Autowired private Environment env; @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); // 必须先设置数据源,否则后续方法调用会触发空指针 sessionFactory.setDataSource(dataSource); // 实体类扫描路径需和实际实体类存放路径完全一致,无拼写错误 sessionFactory.setPackagesToScan("com.att.dmp.entity"); // 加载Hibernate配置属性 Properties hibernateProperties = new Properties(); hibernateProperties.put("hibernate.dialect", env.getProperty("spring.jpa.properties.hibernate.dialect")); hibernateProperties.put("hibernate.show_sql", env.getProperty("spring.jpa.show-sql", "false")); hibernateProperties.put("hibernate.hbm2ddl.auto", env.getProperty("spring.jpa.hibernate.ddl-auto", "none")); sessionFactory.setHibernateProperties(hibernateProperties); return sessionFactory; } } - 检查application.properties配置项
确认所有数据源、JPA相关配置无拼写错误、无缺失:# 数据源配置 spring.datasource.url=jdbc:mysql://你的数据库地址/库名 spring.datasource.username=数据库用户名 spring.datasource.password=数据库密码 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Hibernate配置 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update - 检查依赖兼容性
确保项目引入的spring-boot-starter-data-jpa依赖版本和手动引入的spring-orm版本兼容,Spring Boot 2.x默认适配Hibernate 5.x,不要引入版本不匹配的Hibernate单独依赖。 - 检查实体类注解
所有需要被sessionFactory扫描的实体类都添加了@Entity注解,不存在包路径拼写错误导致扫描不到类的情况。
内容的提问来源于stack exchange,提问作者Jeevan Gyawali
相关产品推荐
相关产品推荐

