调用实体管理器时为NullPointer [英] NullPointer when call entity Manager

查看:95
本文介绍了调用实体管理器时为NullPointer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用Java,Hibernate和Spring编写一些程序.调用SQL查询时,我看到NullPointerException.我可能尝试了Internet上所有的代码示例,但是我不知道该怎么做.我该如何解决?这是我的示例代码.我有完整的程序代码: https://github.com/lukasz-chojn/films_database/tree/master/src/main/java/Films

I try to write some programme using Java, Hibernate and Spring. I see NullPointerException when I call the SQL query. I tried perhaps every samples of code on the internet, but I don't know how to do this. How can I solve it? This is my sample code. There is my full code of programme: https://github.com/lukasz-chojn/films_database/tree/master/src/main/java/Films

    @Controller
    public class DataFromUserController {
        private FilmDaoImpl filmDaoImpl = new FilmDaoImpl();
        private DirectorDaoImpl directorDaoImpl = new DirectorDaoImpl();
        private Locale locale = Locale.getDefault();
        private Scanner sc = new Scanner(System.in).useLocale(locale);

        public FilmDs collectData() {
            //....

            filmDaoImpl.insert(film);
            directorDaoImpl.insert(director);

            return film;
        }

        private String collectTitle() {
            System.out.print("Podaj tytuł filmu: ");
            String tytul = sc.nextLine();
            List<String> existingEntry = filmDaoImpl.existingTitle();
            if (existingEntry.contains(tytul)) {
                System.out.println("Tytuł jest już w bazie. Podaj inny");
                return collectTitle();
            }
                if (tytul.isEmpty()) {
                    System.out.println("Tytuł nie może być pusty. Podaj go");
                    return collectTitle();
                }
            return tytul;
        }//......
    }

    @Service
    @Transactional
    public class FilmDaoImpl implements FilmDAO {

        @PersistenceContext
        private EntityManager entityManager;

        //......
        @Override
        @SuppressWarnings("unchecked")
        public List<String> existingTitle() {
            List<String> titleInTheDatabase;
    // here is NPE
    return titleInTheDatabase = entityManager.createQuery("SELECT film.tytul FROM FilmDs film").getResultList();
        }

        //....
    }

推荐答案

您是自己创建实例,而不是让spring为您注入实例,这就是为什么您丢失所有依赖项(如Entitymanager等)的原因DataFromUserController

You're creating instances on your own instead of letting spring inject it for you which is why you're losing all the dependencies like entitymanager, etc. change your DataFromUserController

@Controller
public class DataFromUserController {

@Autowired
private FilmDAO filmDao;

@Autowired
private DirectorDAO directorDao;

.....
}

这篇关于调用实体管理器时为NullPointer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆