Hi guys
Bkground/Setup
Alright, so I am using Hibernate with Postgres, as I am using date_trunc (JIRA HHH-1787), I have subclasses PostgreSQLDialect myself to add the functionality for date_trunc.
Code:
public class PostgreSQLDialectExt extends org.hibernate.dialect.PostgreSQLDialect {
public PostgreSQLDialectExt() {
super();
registerFunction( "date_trunc", new StandardSQLFunction( "date_trunc", Hibernate.TIMESTAMP ) );
}
}
I am running my app in both JBOSS and Tomcat (it is a webapp) with uses springs IoC for hibernate session creation, and MVC Controllers to carry out the HQL queries.
I dont think the dialect extension is at all linked to my bug, as I have been able to replicate it without "my dialect".
The Exception:Code:
List<Staking> stakes = template.find("from Staking"); // This works fine
/* Cut out using of the above */
template.find("SELECT date_trunc('DAY', handtimestamp) from Playerhandscashkeycolumns where player_id = 1 group by date_trunc('DAY', handtimestamp)");
//The above select also works fine - using the new function
template.find("SELECT sum(netamountwon) from Playerhandscashkeycolumns");
//This causes a NPE (see below) My end goal is the combine date_trunc() and sum() with a group by date_trunc.
Code:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:488)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
java.lang.NullPointerException
org.hibernate.dialect.Dialect$3.getReturnType(Dialect.java:102)
org.hibernate.hql.ast.util.SessionFactoryHelper.findFunctionReturnType(SessionFactoryHelper.java:382)
org.hibernate.hql.ast.tree.AggregateNode.getDataType(AggregateNode.java:21)
org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:143)
org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:705)
org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:529)
org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:645)
org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:849)
org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:373)
org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:847)
org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:839)
com.andrewpaulross.poker.controllers.IndexController.handleRequestInternal(IndexController.java:64)
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:874)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:808)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.24 logs.
Does anybody know why a sum(x) or how a sum(x) could cause a NPE? Where should I look to fix it?
Am I doing something plain wrong? (This is my first hibernate project)