在此问题中,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)
答案 0 :(得分:1)
您的上下文不包含FilmDAO
bean的问题。您可以通过添加@Autowired(required=true)
进行检查。
发生这种情况是因为您具有“ interface + Impl”,并且Impl和interface都另外标记为组件(@Service
和@Repository
)。
您可以通过正确的方式对其进行修复:只需删除FilmDAO
界面(然后将可笑的FilmDAOImpl
重命名为普通的FilmDAO
)。