java - JPA:获取所有抛出空指针异常的行

标签 java sql hibernate jpa persistence

我使用 JPA 作为持久层。有一个简单的表EventCategory

@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "CATEGORY" }))
public class EventCategory {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long categoryId;

    @NotNull
    private String category;

    @OneToMany(mappedBy = "category", cascade = CascadeType.ALL)
    private List<Event> events;

    // getters and setter

}

我正在尝试获取所有行

public List<EventCategory> getAllCategories() {     
    final String query = "SELECT c from EventCategory c";       
    TypedQuery<EventCategory> query1 = em.createQuery(query, EventCategory.class);
    final List<EventCategory> category = query1.getResultList();
    return category;
}

但是我如何得到空指针异常。通过从命令提示符运行 sql 查询,我看到了所需的结果。

异常堆栈

02:51:52,726 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/OSU-eTicket-EJB-Servlet].[jsp]] (http-localhost-127.0.0.1-8080-1) Servlet.service() for servlet jsp threw exception: java.lang.NullPointerException
at com.cse769.EJB.Service.EventCategoryService.getAllCategories(EventCategoryService.java:45) [OSU-eTicket-EJB-Session-Entity.jar:]
at com.CSE769.servlet.CategoryCreateServlet.getlist(CategoryCreateServlet.java:38) [classes:]
at org.apache.jsp.events_jsp._jspService(events_jsp.java:137)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) [jbossweb-7.0.13.Final.jar:]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369) [jbossweb-7.0.13.Final.jar:]
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:326) [jbossweb-7.0.13.Final.jar:]
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:253) [jbossweb-7.0.13.Final.jar:]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_30]

获取所有行适用于其他表。不知道为什么这里失败了。我犯了什么愚蠢的错误吗?

<小时/>

实体管理器代码

@PersistenceContext(unitName = "examples-769-EJB")
EntityManager em;

最佳答案

如果您输入的 getAllCategories() 代码是正确的,那么唯一的可能是 getAllCategories() 中的实体管理器 (em) 为 null。如果您在创建查询之前进行调试或输入消息,您就会看到它。

关于java - JPA:获取所有抛出空指针异常的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10680870/

相关文章:

java - 如何在java程序中拒绝字符/字母

java - Runtime.exec 不编译 java 文件

java - HttpComponent 客户端的默认超时

php - 填补多维数组中的空白

sql - 选择IDENT_CURRENT (‘empty table’)

java - 为基于 Spring 的 REST API 编写 Junit 测试用例

hibernate - 将 Hibernate 与 Presto 结合使用

java - 创建用于使用 maven 构建的 Apklib

mysql - SQL-使用一个元组中的值从另一个元组中获取值

postgresql - 具有 GenerationType.IDENTITY 的 JPA 和 PostgreSQL