【问题标题】:sessionFactory not being injected. It's always nullsessionFactory 没有被注入。它始终为空
【发布时间】:2018-04-09 20:41:50
【问题描述】:

我是 sessionFactory 在我的服务上。

@Component
public class MyService {    

@Autowired
private SessionFactory sessionFactory;

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

public void persistData(){
  ...

  tx.commit();
  session.close();
}

我从

调用此服务
@Component
public class CommandLineApp implements CommandLineRunner {

    @Autowired
    private MyService MyService

    public void run(String... args) throws Exception {
        MyService.persistData();
    }

}

我启动spring boot的主类:

@SpringBootApplication
public class App{

   public static void main(String[] args) {
      SpringApplication.run(App.class, args);
   }

}

当我调用 MyService 时,它​​会收到错误 nullPointException。当我调试代码时,我可以看到 sessionFactory 为空。为什么没有在 MyService 上注入 sessionFactory?

【问题讨论】:

  • SessionFactory 的实例究竟来自哪里。您将需要某种创建实例的提供程序,因为据我所知,Spring 项目默认不公开SessionFactory。另一方面,如果您正在自动配置Spring Data JPA,您应该能够获得EntityManagerFactory 的实例。
  • 你在这里做所有事情吗? baeldung.com/hibernate-5-spring
  • 我可以在 Spring Boot 中使用 java config 类吗?
  • 如果 Spring 无法满足 @Autowired 字段,您的应用程序将无法启动,这很简单,不能是 null。因此,您可能正在自己创建 service.class 的新实例。旁边不要使用普通的休眠使用 JPA(除非你真的想自己配置东西而不是让 Spring Boot 为你做艰苦的工作)。

标签: java spring hibernate session spring-boot


【解决方案1】:

这里的问题是SessionFactory bean 仍然没有 可用于弹簧容器供您注入。 所以首先你需要引导它。 创建一个@configuration文件 或将@Configuration 添加到您的 Main.java 并引导您的 bean,如下所示

@Configuration
public class HibernateSessionProvider {

  @Bean  // If using hibernate.cfg.xml
  public void getSessionFactory() {
    AnnotationSessionFactoryBean annotationSessionFactoryBean = new AnnotationSessionFactoryBean();
    ...
    return annotationSessionFactoryBean()
  }

  @Bean  // If using java based config to provide DataSource beans , hibernate config  
  public void getSessionFactory() {
    LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
    ...
    return localSessionFactoryBean()
  }
}

【讨论】:

    猜你喜欢
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 2019-04-30
    • 2018-03-26
    相关资源
    最近更新 更多