0

在成员变量中使用时,我注入的 EntityManager 未启动。当我在方法中使用它时,它会被启动。

这是一个与注入 bean 的实例化时间有关的问题吗?或者仅仅是因为我使用的是quarkus和hibernate?

    @Inject
    EntityManager entityManager;

    private StudentFacade studentFacade = new StudentFacade(entityManager); //entityManager is null

应该启动变量“entityManager”,但它有一个空值。

4

2 回答 2

2

Quarkus 还支持构造函数注入,因此您还可以执行以下操作:

@Singleton
public class MyBean {

   final StudentFacade studentFacade;

   public MyBean(EntityManager entityManager) {
      this.studentFacade = new StudentFacade(entityManager);
   }

}
于 2019-06-12T15:02:51.383 回答
1

问题是在构造任何studentFacade持有.entityManageentityManager

所以在初始化studentFacade字段时 -entityManager仍然为空。

要解决此问题,您可以将studentFacade变量的初始化延迟到注入之后。通常它是通过使用一些生命周期钩子来完成的,例如:

@PostConstruct
public void onConstruct() {
    studentFacade = new StudentFacade(entityManager);
}

给出了 Spring 框架的示例,但我猜几乎相同的规则适用于您使用的任何内容。

于 2019-06-12T10:41:17.437 回答