-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Getting Null Pointer on SUM of CASE Statement with JPA2
PostPosted: Tue Dec 27, 2011 1:34 pm 
Newbie

Joined: Tue Dec 27, 2011 1:23 pm
Posts: 1
I'm trying to do a SUM against a CASE statement using JPA2 criteria query api. Here's the Java code...

Code:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> query = builder.createQuery(Tuple.class);

Root<TeamAttendance> teamAttendancePath = query.from(TeamAttendance.class);
Join<TeamAttendance, QuestionResponse> questionResponsesPath = teamAttendancePath.join("questionResponses");
...
Expression<Long> rightAnswerCount = builder.sum(builder.selectCase().when(builder.equal(questionResponsesPath.get("score"), new Integer(2)), new Integer(1)).otherwise(new Integer(0)).as(Long.class));


In order to use .sum() I need to cast the otherwise() to a number, but that seems to be what's causing the exception. If I use the case statement directly, without the sum() and as(), it works as expected. If I sum the column without the case statement it works as expected.

I've also tried casting it a number of ways and I've gotten the same exception.

Here's the top of the stack:

Code:
java.lang.NullPointerException
   org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions$SumFunction.determineJdbcTypeCode(StandardAnsiSqlAggregationFunctions.java:145)
   org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions$SumFunction.getReturnType(StandardAnsiSqlAggregationFunctions.java:157)
   org.hibernate.hql.ast.util.SessionFactoryHelper.findFunctionReturnType(SessionFactoryHelper.java:406)
   org.hibernate.hql.ast.tree.AggregateNode.getDataType(AggregateNode.java:82)
   org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:154)
   org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:857)
   org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:645)
   org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:685)
   org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
   org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244)
   org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:256)
   org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:187)
   org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138)
   org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
   org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
   org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
   org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
   org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
   org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
   org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:468)
   org.hibernate.ejb.criteria.CriteriaQueryCompiler.compile(CriteriaQueryCompiler.java:227)
   org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:603)
   sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source)
   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   java.lang.reflect.Method.invoke(Method.java:597)
   org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
   $Proxy23.createQuery(Unknown Source)
   sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source)
   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   java.lang.reflect.Method.invoke(Method.java:597)
   org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
   $Proxy23.createQuery(Unknown Source)


I'm not sure if I'm using this wrong or it's a bug in Hibernate.

Thanks in advance.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.