You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已添加spring-data-jpa依赖但EntityManager为空,创建SessionFactory失败

问题原因
  1. Bean初始化顺序问题:@Configuration类中字段注入的EntityManager初始化时机晚于@Bean方法的执行时机,调用getSessionFactory()方法时,字段还未完成注入,因此为null。
  2. 原有代码逻辑错误:判断entityManager.unwrap(Session.class) == null时才返回SessionFactory,条件写反,就算EntityManager不为空也会返回null。
解决方案

方案1:通过方法参数注入EntityManager

将EntityManager作为@Bean方法的入参传入,Spring会自动保证依赖的Bean先完成初始化再执行@Bean方法,修正逻辑后代码如下:

@Configuration
public class BeanConfig {

    @Bean
    public SessionFactory getSessionFactory(EntityManager entityManager) {
        Session session = entityManager.unwrap(Session.class);
        if (session != null) {
            return session.getSessionFactory();
        }
        throw new RuntimeException("无法从EntityManager获取Hibernate Session实例");
    }
}

方案2(更推荐):直接从EntityManagerFactory获取SessionFactory

EntityManager本身是线程不安全的实例,直接通过EntityManagerFactory转换更稳妥,代码更简洁:

@Configuration
public class BeanConfig {

    @Bean
    public SessionFactory getSessionFactory(EntityManagerFactory entityManagerFactory) {
        return entityManagerFactory.unwrap(SessionFactory.class);
    }
}
注意事项
  • 确保项目启动类上添加了@EntityScan注解,能正确扫描到所有JPA实体类
  • 确认application.properties中的数据库连接配置正确,启动时无数据库连接异常
  • 现有spring-boot-starter-data-jpa依赖已包含Hibernate核心组件,无需额外引入其他Hibernate相关依赖

内容的提问来源于stack exchange,提问作者Ajeeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:57:00