java - TypedQuery 给出 NullPointerException

标签 java spring jpa

一直在使用 Spring MVC 和 JPA 编写一些代码,我偶然发现了这个问题。

在尝试输出我的一个类(class)(本例中为 Student)时,我在 TypedQuery 代码行处遇到 NullPointerException

StudentDAO.java:

// Retrieves all the users:
public List<Student> getAllStudents() {
    TypedQuery<Student> query = em.createQuery("SELECT s FROM Student AS s", Student.class);
    return query.getResultList();
}

下面是出现的错误(编辑:抱歉正在使用另一个查询函数进行测试,将其更改为正确的错误消息)

java.lang.NullPointerException
at com.prototype.spring.StudentDAO.getAllStudents(StudentDAO.java:23)
at org.apache.jsp.WEB_002dINF.view.addStudent_jsp._jspService(org.apache.jsp.WEB_002dINF.view.addStudent_jsp:101)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:470)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:364)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:285)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

但是,当我对另一个类(本例中为 CreateSession)执行完全相同的代码时,代码输出完全没有错误。谁能帮我理解为什么会出现错误?

public List<CreateSession> getAllSessions() {
    TypedQuery<CreateSession> query = em.createQuery("SELECT s FROM CreateSession AS s", CreateSession.class);
    return query.getResultList();
}

(编辑2:下面是StudentDAO.java)

package com.prototype.spring;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
public class StudentDAO {
    // Injected database connection:
    @PersistenceContext private EntityManager em;

    // Stores a new User:
    @Transactional
    public void persist(Student student) {
        em.persist(student);
    }

    // Retrieves all the users:
    @Transactional
    public List<Student> getAllStudents() {
        TypedQuery<Student> query = em.createQuery("SELECT s FROM Student AS s", Student.class);
        return query.getResultList();
    }

    public List<Student> getFromQuery(String q)
    {
            TypedQuery<Student> query = em.createQuery(q, Student.class);
            return query.getResultList();
    }
}

最佳答案

我假设您的 Student 表中的 s 包含一个 null 值。由于 null 的类型为 Student,因此它可以工作,但当您尝试调用 getResultList() 时,您会收到 NullPointerException

关于java - TypedQuery 给出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20322770/

相关文章:

sql - MyBatis RowBounds 不限制查询结果

hibernate 、检测和删除级联顺序

java - Collection 的 Collection

java - 如何仅在引用实体时忽略 JSON?

java - 在对象之间切换时如何摆脱矩形内的圆圈

java - java中如何使用try/catch避免抛出FileNotFoundException

java - 获取有关 Maven 依赖项的信息

java - 按负数移动

java - 找不到 EnableOAuth2Sso 注释的导入

java - 哪种类型的 Spring 集成 channel ?