当前位置: 首页 > 面试题库 >

Hibernate的createQuery()上的Null指针

呼延辰龙
2023-03-14
问题内容

我正在努力探究在尝试使用createQuery()运行HQL查询时发生的空指针异常的根源。

运行查询的代码非常简单。最初,我有一个我要调用的命名查询,但是只是为了使事情变得更简单并消除我正在做的任何麻烦(springwildlife是程序包,而Species是类/实体):

Query q = session.createQuery("SELECT s FROM springwildlife.Species s");

(顺便说一句:我也尝试过使用其中没有包名的方法。并且我还尝试过执行一个更简单的“ FROM springwildlife.Species”查询)

我已经创建了一个XML映射(species.hbm.xml),如下所示:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class name="springwildlife.Species" table="species">
      <id name="id" type="java.lang.Long" column="id" >
          <generator class="native">
              <param name="sequence">species_id_seq</param>
          </generator>

  </id>

  <!-- in the actual file I have one these for each item I want to be mapped -->

  <property name="propertyFromClass" type="java.lang.String">
   <column name="sql_table_column_name" />
  </property>

</hibernate-mapping>

在我的hibernate.cfg.xml文件中,我像这样拉入映射:

我的课程/实体看起来像这样:

package springwildlife;

public class Species
{
    // properties here

    public Species()
    {
    }

    // sets, gets, etc.

}

有谁知道发生了什么吗?我花了很多时间试图对其进行跟踪,但我陷入了困境。

(我不确定是否相关,但以防万一,我使用Resin作为服务器,使用IntelliJ作为IDE)

这是堆栈跟踪(SpeciesFactory.java中的第68行是对createQuery的调用):

[11-06-02 11:19:26.726] {http:// *:8080-2} org.springframework.web.util.NestedServletException:请求处理失败;嵌套的异常是java.lang.NullPointerException
    在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656)
    在org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    在javax.servlet.http.HttpServlet.service(HttpServlet.java:119)
    在javax.servlet.http.HttpServlet.service(HttpServlet.java:96)
    在com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:109)
    在com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:156)
    在com.caucho.server.webapp.AccessLogFilterChain.doFilter(AccessLogFilterChain.java:95)
    在com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:287)
    在com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:792)
    在com.caucho.network.listen.TcpSocketLink.dispatchRequest(TcpSocketLink.java:730)
    在com.caucho.network.listen.TcpSocketLink.handleRequest(TcpSocketLink.java:689)
    在com.caucho.network.listen.TcpSocketLink.handleRequestsImpl(TcpSocketLink.java:669)
    在com.caucho.network.listen.TcpSocketLink.handleRequests(TcpSocketLink.java:617)
    在com.caucho.network.listen.AcceptTask.doTask(AcceptTask.java:104)
    在com.caucho.network.listen.ConnectionReadTask.runThread(ConnectionReadTask.java:98)
    在com.caucho.network.listen.ConnectionReadTask.run(ConnectionReadTask.java:81)
    在com.caucho.network.listen.AcceptTask.run(AcceptTask.java:67)
    在com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:164)
    在com.caucho.env.thread.ResinThread.run(ResinThread.java:130)
造成原因:java.lang.NullPointerException
    在springwildlife.SpeciesFactory.getSpeciesLister(SpeciesFactory.java:68)
    在springwildlife.LifelistController.handleRequestInternal(LifelistController.java:26)
    在org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
    在org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
    在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
    在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    ...另外18个

问题答案:

由于NullPointerException与一致createQuery(),唯一可能的原因sessionnull



 类似资料:
  • 现在只有这个语句“session.createquery(....)”大约需要105毫秒,这是用上面提到的老方法执行整个查询任务的10倍。 现在我不确定Hibernate查询缓存是如何工作的,但如果我第二次运行这个相同的HQL语句,大约需要5毫秒。 现在我的问题是为什么使用Hibernate HQL会发生这种行为?任何人都知道“session.createquery(...)”内部发生了什么方法,

  • 问题内容: 谁能告诉我Hibernate的区别: 谁能告诉我这三个函数返回什么数据,cq指导我找到一个适当而简单的链接来研究这些Hibernate函数? 问题答案: 为了在Hibernate ORM框架中创建查询,有三种不同的类型。以下是创建查询实例的三种方法: 详细研究每个类别的详细信息。 方法createQuery()使用HQL语法创建Query对象。例如: 方法createSQLQuery(

  • 下面是我的代码,用来说明我是如何调用它的: 下面的代码将生成错误: 但是,如果我做了这样的事情,我可以看到结果: 所有对em的引用都是通过此包导入的: 上面的两个查询不应该生成相同的结果吗?我是否缺少对列表接口的强制转换以允许它在类型化查询中工作?

  • 当使用JPA createQuery()时,我发现我们可以同时使用类名和实体名来获取DB数据。 这是按类名写的 em.createQuery(“from com.model.Stuff s”, Stuff.class).getResultList(); 这是来自实体名称 em.createQuery("from Stuff s",Stuff.class). getResultList(); 这是在

  • 问题内容: 我有3种方式将内容写入数据库 我遇到的问题是为了让Hibernate Envers实际将审计记录写入相应的x_aud和revinfo DB表中。它仅适用于“ .persist()”或“ .merge()”。我无法使其适用于’createQuery(…). executeUpdate() ‘ 我是否缺少某些东西,或者只是无法使用?问题是,我的很多代码都是使用.executeUpdate编

  • 当我启动时,遇到一个奇怪的错误: 这是我的类: 当参数被指定为非空时,该错误指出它为空;但它是可为null的(),并且方法在源代码中标记为。 我在其他Kotlin项目中没有遇到过这个错误。我使用的是Kotlin版本1.1.2-5;与1.1.2-3有相同的误差。