我在使用service的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();
    }

}


我的春季班开始的主要班级:

@SpringBootApplication
public class App{

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

}


当我调用MyService时,出现错误nullPointException。当我调试代码时,我可以看到sessionFactory为null。为什么没有在MyService上注入sessionFactory?

最佳答案

这里的问题是SessionFactory bean仍然没有
可用于弹簧容器以供您注入。
所以首先您需要引导它。
创建一个@configuration文件
或在您的Main.java中添加@Configuration并引导您的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()
  }
}

关于java - sessionFactory没有被注入(inject)。永远为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49711458/

10-10 17:23