当我尝试获取对象列表时为NullPointer

时间:2018-08-28 19:07:19

标签: java spring entitymanager

在此问题中,NullPointer when call entity Manager建议将@Autowire DAO添加到控制器中。我做到了,它工作正常。然后,我在@Transactional中添加了DaoImpl注释,并且除select语句外,每个操作的插入/删除/更新均可用。当我调用此方法时,会看到 NPE 。有人可以帮忙吗?

public List<Object[]> showAll() {
        return filmDao.getAllFilms();
    }

这是控制器的完整代码:https://pastebin.com/BNi5EH86 选择外观如下:

public List<Object[]> getAllFilms() {
    List<Object[]> all;
    EntityManager manager = getEntityManager();

    return manager.createQuery("SELECT film.id, film.tytul, film.czasTrwania, film.rozmiar, director.imieInazwisko FROM FilmDs film " +
            "JOIN DirectorDs director ON film.tytul=director.tytul").getResultList();
}

在屏幕上打印:

public void viewAll() {
        for (Object[] film : filmOperationController.showAll()) {
            Arrays.asList(film);
            System.out.print("Nr. " + film[0]
                    + ", Tytuł: " + film[1]
                    + ", Reżyser: " + film[4]
                    + ", Czas:  " + film[2]
                    + ", Wielkość pliku: " + film[3]
                    + "\n");
        }
    }

完整的堆栈跟踪:

  

线程“ main”中的异常java.lang.NullPointerException在   Films.controller.FilmOperationController.showAll(FilmOperationController.java:50)   在Films.view.ViewFilm.viewAll(ViewFilm.java:16)处   Films.Main.showAndSearch(Main.java:40)在   Films.Main.main(Main.java:23)

1 个答案:

答案 0 :(得分:1)

您的上下文不包含FilmDAO bean的问题。您可以通过添加@Autowired(required=true)进行检查。

发生这种情况是因为您具有“ interface + Impl”,并且Impl和interface都另外标记为组件(@Service@Repository)。

您可以通过正确的方式对其进行修复:只需删除FilmDAO界面(然后将可笑的FilmDAOImpl重命名为普通的FilmDAO)。