【发布时间】:2011-06-02 15:06:23
【问题描述】:
当我尝试使用 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 更多
【问题讨论】:
-
如果堆栈跟踪的前几行不只是指向那一行代码,也可能会有所帮助。
-
既然是用注解来标记实体类,那为什么还要用
hibernate.cfg.xml呢? -
马特,看到会发生什么是事后的想法.....当我最初偶然发现这个问题时,注释不存在。为了清楚起见,我在帖子中删除了它们。
-
迈克尔和史蒂夫,我已经发布了堆栈跟踪。
-
好吧,
springwildlife.SpeciesFactory.getSpeciesLister(SpeciesFactory.java:68)会发生什么?