NullPointerException在Spring Boot Hibernate应用程序中访问EntityManagerFactory

时间:2019-07-03 20:49:07

标签: hibernate spring-boot

我有一个带有两个实体的Spring Boot-Hibernate应用程序。该应用程序具有一个类,该类实现ApplicationListener接口以在启动时加载一些数据。在此类中,我自动装配了由Spring Boot自动配置的EntityManagerFactory(我假设),并使用它来加载数据,如下所示:

    @Autowired
    private EntityManagerFactory entityManagerFactory;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        EntityManager entityManager = entityManagerFactory.createEntityManager();

        entityManager.getTransaction().begin();
        entityManager.persist(…);
        entityManager.getTransaction().commit();
    }

这可以正常工作,并且数据被持久保存到数据库中。 在应用程序本身中,我有一个Service类,在其中尝试对数据库运行查询。但是,当我自动连接EntityManagerFactory并尝试使用它时,出现NullPointerException:

@Autowired
private EntityManagerFactory entityManagerFactory;

public ConcertEventResponse getEventInfo(ConcertEventRequest request) {
    ConcertEventResponse response = new ConcertEventResponse();

    // Get NullPointerException here!
    EntityManager entityManager = entityManagerFactory.createEntityManager();
    // Get NullPointerException here!

    entityManager.getTransaction().begin();
    String name = request.getArtistName();
    Query query = entityManager.createQuery("select a from Artist a where a.name = :name");
    query.setParameter("name", name);
    Artist artist = (Artist) query.getSingleResult();

    entityManager.getTransaction().commit();
    response.setArtist(artist);

    return response;
}

该类用@Service注释。我可以使用基于构造函数的注入来获取EntityManagerFactory上的句柄,但不明白为什么我可以在一个位置而不是另一个位置自动装配它。我究竟做错了什么?如果重要的话,我正在使用H2作为数据库。

0 个答案:

没有答案