gpt4 book ai didi

java - TypedQuery 给出 NullPointerException

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:21 25 4
gpt4 key购买 nike

一直在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com