| I am reporting this as a bug because Hibernate does not explain me what is wrong with my HQL syntax and instead leaves a NPE in the wild. I found that my syntax contains a trivial error (not referencing properties of associated ManyToOne eager relationship) Input Wrong HQL is
select sum(item.importo) from Movimento item where ((organizationId in ( ?0 )) and ?1 in elements(associatedUsers) and (dataValuta < ?2))
Correct HQL is
select sum(item.importo) from Movimento item where ((contoCorrente.organizationId in ( ?0 )) and ?1 in elements(contoCorrente.associatedUsers) and (dataValuta < ?2))
Movimento class properties:
- contoCorrente: POJO ContoCorrente @ManyToOne
- dataValuta: java.util.Date
ContoCorrente properties:
- organizationId: string
- associatedUsers: Set<String>
Exception
java.lang.NullPointerException
at org.hibernate.hql.internal.ast.tree.MethodNode.handleElements(MethodNode.java:194) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.ast.tree.MethodNode.resolveCollectionProperty(MethodNode.java:147) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.ast.tree.CollectionFunction.resolve(CollectionFunction.java:26) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.ast.HqlSqlWalker.processFunction(HqlSqlWalker.java:1145) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.collectionFunction(HqlSqlBaseWalker.java:3025) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.collectionFunctionOrSubselect(HqlSqlBaseWalker.java:4924) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.inRhs(HqlSqlBaseWalker.java:4833) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4500) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2130) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2058) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2055) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:813) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:607) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:311) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:259) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:302) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:240) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1907) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
at it.csttech.regia.data.daos.hibernate.MovimentoDaoImpl.sumAllImporti(MovimentoDaoImpl.java:22) ~[classes/:?]
Expected result An exception that tells there is no such property "organizationId" in class Movimento (because it is a property of movimento.contoCorrente relationship)
I propose this suitable for new contributors because I deem such NPE handling very easy to address |