Issue Type: Bug Bug
Affects Versions: 4.1.9
Assignee: Unassigned
Created: 11/Feb/13 11:34 AM
Description:

I got the following query that is working fine:
TypedQuery<Song> query = em.createQuery("select s from Song s where (s.totalDownloads = 20 or s.weight = 10.00) and (s.price = 20.00 or s.type = :type)", Song.class);
query.setParameter("type", SongType.PRAISE);

System.err.println(query.getResultList()); //bring two results as expected

If I translate it to a Criteria I got an exception.

This is the criteria code:

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Song> criteriaQuery = criteriaBuilder.createQuery(Song.class);
Root<Song> mainRoot = criteriaQuery.from(Song.class);
criteriaQuery.select(mainRoot);
Predicate predicate1 = criteriaBuilder.equal(mainRoot.get("totalDownloads").as(Long.class), 20L);
Predicate predicate2 = criteriaBuilder.equal(mainRoot.get("weight").as(Float.class), 10.00f);
Predicate firstOr = criteriaBuilder.or(predicate1, predicate2);

Predicate predicate3 = criteriaBuilder.equal(mainRoot.get("price").as(double.class), 20.00d);
Predicate predicate4 = criteriaBuilder.equal(mainRoot.get("type"), SongType.PRAISE);
Predicate secondOr = criteriaBuilder.or(predicate4, predicate3);

Predicate finalPredicate = criteriaBuilder.and(firstOr, secondOr);

criteriaQuery.where(finalPredicate);
TypedQuery<Song> criteriaGeneratedQuery = em.createQuery(criteriaQuery);
System.err.println(criteriaGeneratedQuery.getResultList());

The exception is:

Exception in thread "main" java.lang.NullPointerException
at org.hibernate.dialect.function.CastFunction.render(CastFunction.java:55)
at org.hibernate.hql.internal.ast.SqlGenerator.endFunctionTemplate(SqlGenerator.java:219)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.methodCall(SqlGeneratorBase.java:2166)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.simpleExpr(SqlGeneratorBase.java:2521)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.expr(SqlGeneratorBase.java:1383)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.binaryComparisonExpression(SqlGeneratorBase.java:2747)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.comparisonExpr(SqlGeneratorBase.java:1211)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.booleanExpr(SqlGeneratorBase.java:860)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.booleanOp(SqlGeneratorBase.java:2685)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.booleanExpr(SqlGeneratorBase.java:840)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.booleanOp(SqlGeneratorBase.java:2665)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.booleanExpr(SqlGeneratorBase.java:840)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.whereExpr(SqlGeneratorBase.java:725)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.selectStatement(SqlGeneratorBase.java:178)
at org.hibernate.hql.internal.antlr.SqlGeneratorBase.statement(SqlGeneratorBase.java:111)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.generate(QueryTranslatorImpl.java:232)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1735)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:487)
at org.hibernate.ejb.criteria.CriteriaQueryCompiler.compile(CriteriaQueryCompiler.java:227)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:622)
at com.uaihebert.test.Main.main(Main.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

The problem is that I found an "ugly" solution that is: to use the attribute totalDownloads as Long instead of long.

My software has as pattern using long and not Long.

Thanks! =D

https://forum.hibernate.org/viewtopic.php?f=1&t=1025383

Environment: Hibernate 4.1.9
HSQLDB 2.2.9
Project: Hibernate ORM
Priority: Major Major
Reporter: Hebert Coelho
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira