ClassCastException query.setParameter (JPA)

7 respostas
lelodois

Bom dia

Estou com um erro estranho.
Quando passo o valor explicito não dá erro.

query.setParameter("valorCriterio", 5454545);
		query.setParameter("codigoFuncionalidade", 	4);
                query.getResultList();
Mas... se eu setar o parametro de um objeto query passando a variável...
final int codigoFuncionalidade = 4;
		final int valorCriterio = 5454545;
		Query query = entityManager.createQuery(finalJpaHql.toString());
		query.setParameter("valorCriterio", valorCriterio);
		query.setParameter("codigoFuncionalidade", 	codigoFuncionalidade);
                query.getResultList();

Recebo esta exceção:

java.lang.ClassCastException: java.lang.String
	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.NamedParameterSpecification.bind(NamedParameterSpecification.java:61)
	at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:514)
	at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1589)
	at org.hibernate.loader.Loader.doQuery(Loader.java:696)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
	at org.hibernate.loader.Loader.doList(Loader.java:2228)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
	at org.hibernate.loader.Loader.list(Loader.java:2120)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
	at br.com.teste.dao.impl.MeuDao$2.doInJpa(MeuDaoImpl.java:199)
	at br.com.teste.dao.impl.MeuDao$2.doInJpa(MeuDaoImpl$2.doInJpa(MeuDaoImpl.java:1)
	at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:184)
	at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:147)
	at br.com.teste.dao.impl.MeuDao.consultar(MeuDaoImpl.java:187)
	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:585)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
	at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:54)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	at $Proxy119.consultarSolicitacoes(Unknown Source)
	at br.com.teste.MeuDaoTest.testar(MeuDaoTest.java:418)
	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:585)
	at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
	at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
	at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

O que pode ser?
Agradeço

7 Respostas

L

Cara naum use tipos primitivos como parametros em query,
Use Integer inves de int.

lelodois

lgweb:
Cara naum use tipos primitivos como parametros em query,
Use Integer inves de int.

Concordo que trabalhar com Wrapper é a melhor forma, mas teoricamente isto não iria influenciar no erro.

Testei alterando os tipos primitivos para wrapper mas continua dando erro.

vlw

Andre_Brito

Tente assim ó:

query.setParameter("valorCriterio", String.valueOf(5454545)); query.setParameter("codigoFuncionalidade", String.valueOf(4)); query.getResultList();

lelodois

Andre Brito:
Tente assim ó:

query.setParameter("valorCriterio", String.valueOf(5454545)); query.setParameter("codigoFuncionalidade", String.valueOf(4)); query.getResultList();

Boa tarde.

Tentei e nada…
Continua a exceção.

lelodois

continuo com o problema…: :cry:

"Para quem já mordeu cachorro por causa de comida, até que cheguei longe."
kkkkkkkkk
Emicida rs

Andre_Brito

Já tentou tirar os finals? Dar um new Integer(5454545) dentro do setParameter?
Me mostra a sua JPQL.

lelodois

Andre Brito:
Já tentou tirar os finals? Dar um new Integer(5454545) dentro do setParameter?
Me mostra a sua JPQL.

A variável já é um Integer, se eu colocar o 54545454 funciona.

StringBuffer qposle = new StringBuffer(" From Objeto a  ");
		qposle.append(" Where a.data >= :dataInicio ");
		qposle.append(" AND a.data   <= :dataFinal");
		qposle.append(" AND a.codigo = :codigo ");
                qposle.append(" AND a.other = :other");		
		
  	        query.setParameter("dataInicio ", dataInicio );
		query.setParameter("dataFim", dataFinal);
		query.setParameter("codigo ",codigo );
		query.setParameter("other", other);

Não tem nada demais na minha jqpl…

Criado 23 de junho de 2010
Ultima resposta 23 de jun. de 2010
Respostas 7
Participantes 3