java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

Hibernate JIRA | Michael Wyraz | 7 years ago
tip
Your exception is missing from the Samebug knowledge base.
Here are the best solutions we found on the Internet.
Click on the to mark the helpful solution and get rewards for you help.
  1. 0

    I have 2 mapped entities: EntityA [ id:long, testMap:Map<EnityB,Integer>, some other properties ] EntityB [ id:long, some other properties ] The mapping of EntityA is like: <class name="EntityA"> <id name="id">...</id> <map name="testMap" table="a_to_b"> <key column="a_id"/> <map-key-many-to-many column="b_id" class="EntityB"/> <element type="integer" column="int_value"/> </map> </class> Now I want to query all EntityA with a certain EnityB as map key: 1. "from a EntityA left join a.testMap b where index(b).id=?" Parameter: <Long> (id of an EntityB) 15:35:12,349 ERROR PARSER:56 - <AST>:1:94: unexpected AST node: ( java.lang.NullPointerException at org.hibernate.hql.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:534) at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4543) at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1289) at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4243) at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3722) at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1864) at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1792) at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:818) at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:604) at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:288) at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231) at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254) at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185) at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94) at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651) [...] 2. "from a EntityA left join a.testMap b where index(b)=?" Parameter: <Long> (id of an EntityB) This is really strange: it tries to run the getter of EnityB.id againt a <Long> org.hibernate.PropertyAccessException: could not get a field value by reflection getter of test.EntityB.id at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:58) at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:199) at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3605) [...] Caused by: java.lang.IllegalArgumentException: Can not set long field test.EntityB.id to java.lang.Long at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146) at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150) at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37) at sun.reflect.UnsafeLongFieldAccessorImpl.getLong(UnsafeLongFieldAccessorImpl.java:42) at sun.reflect.UnsafeLongFieldAccessorImpl.get(UnsafeLongFieldAccessorImpl.java:18) at java.lang.reflect.Field.get(Field.java:358) at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:55) ... 67 more 3. "from a EntityA left join a.testMap b where index(b)=?" Parameter: <EntityB> 15:40:24,935 INFO IntegerType:158 - could not bind value '2009219112005957163' to parameter: 1; java.lang.Long cannot be cast to java.lang.Integer java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer at org.hibernate.type.IntegerType.set(IntegerType.java:64) at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154) at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136) at org.hibernate.param.PositionalParameterSpecification.bind(PositionalParameterSpecification.java:68) at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:514) at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1593) Here it thinks that the index() is of type integer.

    Hibernate JIRA | 7 years ago | Michael Wyraz
    java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
  2. 0

    I have 2 mapped entities: EntityA [ id:long, testMap:Map<EnityB,Integer>, some other properties ] EntityB [ id:long, some other properties ] The mapping of EntityA is like: <class name="EntityA"> <id name="id">...</id> <map name="testMap" table="a_to_b"> <key column="a_id"/> <map-key-many-to-many column="b_id" class="EntityB"/> <element type="integer" column="int_value"/> </map> </class> Now I want to query all EntityA with a certain EnityB as map key: 1. "from a EntityA left join a.testMap b where index(b).id=?" Parameter: <Long> (id of an EntityB) 15:35:12,349 ERROR PARSER:56 - <AST>:1:94: unexpected AST node: ( java.lang.NullPointerException at org.hibernate.hql.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:534) at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4543) at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1289) at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4243) at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3722) at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1864) at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1792) at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:818) at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:604) at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:288) at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231) at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254) at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185) at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94) at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651) [...] 2. "from a EntityA left join a.testMap b where index(b)=?" Parameter: <Long> (id of an EntityB) This is really strange: it tries to run the getter of EnityB.id againt a <Long> org.hibernate.PropertyAccessException: could not get a field value by reflection getter of test.EntityB.id at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:58) at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:199) at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3605) [...] Caused by: java.lang.IllegalArgumentException: Can not set long field test.EntityB.id to java.lang.Long at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146) at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150) at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37) at sun.reflect.UnsafeLongFieldAccessorImpl.getLong(UnsafeLongFieldAccessorImpl.java:42) at sun.reflect.UnsafeLongFieldAccessorImpl.get(UnsafeLongFieldAccessorImpl.java:18) at java.lang.reflect.Field.get(Field.java:358) at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:55) ... 67 more 3. "from a EntityA left join a.testMap b where index(b)=?" Parameter: <EntityB> 15:40:24,935 INFO IntegerType:158 - could not bind value '2009219112005957163' to parameter: 1; java.lang.Long cannot be cast to java.lang.Integer java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer at org.hibernate.type.IntegerType.set(IntegerType.java:64) at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154) at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136) at org.hibernate.param.PositionalParameterSpecification.bind(PositionalParameterSpecification.java:68) at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:514) at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1593) Here it thinks that the index() is of type integer.

    Hibernate JIRA | 7 years ago | Michael Wyraz
    java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

    Root Cause Analysis

    1. java.lang.ClassCastException

      java.lang.Long cannot be cast to java.lang.Integer

      at org.hibernate.type.IntegerType.set()
    2. Hibernate
      Loader.prepareQueryStatement
      1. org.hibernate.type.IntegerType.set(IntegerType.java:64)
      2. org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154)
      3. org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136)
      4. org.hibernate.param.PositionalParameterSpecification.bind(PositionalParameterSpecification.java:68)
      5. org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:514)
      6. org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1593)
      6 frames