|
Setting null value for a bind parameter of type Class in a Query results in a NullPointerException.
This is most probably because the line org.hibernate.persister.entity.DiscriminatorType.nullSafeSet(PreparedStatement, Object, int, SessionImplementor):107 is calling the following without any null checks for the value: session.getFactory().getClassMetadata((Class) value).getEntityName() However, the line org.hibernate.internal.SessionFactoryImpl.getClassMetadata(Class):1234 does not have a null check: return getClassMetadata( persistentClass.getName() );
For example, after setting a null value for such a parameter it gives the following stack trace when trying to get a result list:
Caused by: java.lang.NullPointerException at org.hibernate.internal.SessionFactoryImpl.getClassMetadata(SessionFactoryImpl.java:1234) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.persister.entity.DiscriminatorType.nullSafeSet(DiscriminatorType.java:107) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:66) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:608) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1870) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1831) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.loader.Loader.doQuery(Loader.java:899) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.loader.Loader.doList(Loader.java:2516) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.loader.Loader.doList(Loader.java:2502) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2332) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.loader.Loader.list(Loader.java:2327) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:490) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1268) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101) [hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1] at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:264) [hibernate-entitymanager-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1]
|