【问题标题】:Null pointer exception in CriteriaQuery using spring boot and spring data JPA使用 Spring Boot 和 Spring Data JPA 的 CriteriaQuery 中的空指针异常
【发布时间】:2019-02-03 22:01:06
【问题描述】:

我正在尝试使用带有 Spring Boot 和 Spring Data JPA 的 CriteriaQuery 来实现 Criteria API 的一个示例。当我运行项目时,我收到错误 Null 指针异常,

错误,

java.lang.NullPointerException: null
at com.spacestudy.controller.AuthenticationController.load(AuthenticationController.java:57) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_161]

我的控制器中的测试代码是,

@GetMapping("/load")
    public void load() {

        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Permissions> cq = cb.createQuery(Permissions.class);
        Root<Permissions> rPermission = cq.from(Permissions.class);
        cq.select(rPermission);
        cq.where(cb.equal(rPermission.get("nuserId"),730));    
        List<Permissions> results = em.createQuery(cq).getResultList();
        for (Permissions permission : results) {
            System.out.println("Number = " + permission.getSpermissionType());
        }
    }

堆栈跟踪,

Java.lang.NullPointerException: null
at com.spacestudy.controller.AuthenticationController.load(AuthenticationController.java:57) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_161]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_161]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_161]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_161]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) ~[spring-web-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877) ~[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783) ~[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) ~[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) ~[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974) ~[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866) ~[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) ~[tomcat-embed-core-8.5.31.jar:8.5.31]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851) ~[spring-webmvc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.31.jar:8.5.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-8.5.31.jar:8.5.31]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.31.jar:8.5.31]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.31.jar:8.5.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.31.jar:8.5.31]

我是这个 Criteria API 的新手。谁能帮我解决这个问题?

【问题讨论】:

  • 你能分辨出哪一行是第 57 行吗?
  • EntityManager 应该是@Autowired。
  • @Manasi,第 57 行 - EntityManager em = emf.createEntityManager();
  • 似乎你的 emf 为空,因为 Ozgur 建议你应该自动装配 EntityManager

标签: java spring spring-boot jpa criteria-api


【解决方案1】:

EntityManager 应该是@PersistenceContext。

@PersistenceContext – 我们需要了解如何仅使用简单的注解 @PersistenceContext 来连接数据库,以及它是什么。

 @PersistenceContext
 private EntityManager emf;

 @GetMapping("/load")
 public void load() {
    CriteriaBuilder cb = emf.getCriteriaBuilder();
    CriteriaQuery<Permissions> cq = cb.createQuery(Permissions.class);
    Root<Permissions> rPermission = cq.from(Permissions.class);
    cq.select(rPermission);
    cq.where(cb.equal(rPermission.get("nuserId"),730));    
    List<Permissions> results = em.createQuery(cq).getResultList();
    for (Permissions permission : results) {
        System.out.println("Number = " + permission.getSpermissionType());
    }
}

【讨论】:

  • 是的。我添加了,但我越来越喜欢 - 在文件 [C:\spacestudy_workstation\SpaceStudySecurityService\target\classes\com\spacestudy\controller\AuthenticationController.class] 中定义:合并 bean 定义的后处理失败;嵌套异常是 java.lang.IllegalStateException:静态字段不支持持久性注释
  • @PersistenceContext 私有静态 EntityManagerFactory 电动势; - 这是我在控制器顶部的代码
  • 是的,现在我明白了问题所在。它现在正在工作。我能够获取样本输出。感谢您的回复和指导。它对我帮助很大。
  • @ozgur 你的代码块可读性低,以后很难重用。你能让它更具可读性,以便对其他开发人员产生更好的影响吗?这是您可以做的事情:添加一些空白行并分隔代码的不同部分并为变量使用更好的名称,以便将来使用时更具可读性。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 2018-12-31
  • 2021-08-31
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 2021-06-15
相关资源
最近更新 更多