[RESOLVIDO]Ajuda com Cast em consulta

9 respostas
Diego_Adriano

Bem … tenho a seguinte Query

@NamedQuery(name="contacontabil.count",query="SELECT COUNT(cc.id) FROM ContaContabil cc, GrupoConta gc" + " WHERE cc.grupoConta = gc.id AND gc.id =:id") @Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id;

Repository

public Integer contaCount(Integer id){ Query query = this.entityManager.createNamedQuery("contacontabil.count"); query.setParameter("id", id); return (Integer) query.getSingleResult(); }
Bean

O erro:

Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer at br.com.duxsolutions.repository.GrupoContaRepository.contaCount(GrupoContaRepository.java:44) at br.com.duxsolutions.bean.ContasBean.geraCodigoConta(ContasBean.java:238) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.apache.el.parser.AstValue.invoke(AstValue.java:262) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153) ... 29 more
Já tentei retornar um Long mas tive o mesmo problema … Alguem sabe o que pode ser ?

9 Respostas

ederfreitas

Altere o tipo do campo id para Long que resolverá seu problema

Diego_Adriano

Alguma outra forma sem mexer na estrutura da tabela ?

Rodrigo_Sasaki

O problema está no argumento que seu método recebe, não no tipo do retornopublic Integer contaCount(Integer id){ você tem que receber Long id;

Hebert_Coelho

digaoneves:
O problema está no argumento que seu método recebe, não no tipo do retornopublic Integer contaCount(Integer id){ você tem que receber Long id;
+1

Diego_Adriano
Bem, veja como fica se eu passar um Long
public Integer contaCount(Long id)

Grave: java.lang.IllegalArgumentException: Parameter value [1] was not matching type [java.lang.Integer]
	at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:360)
	at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:354)
	at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:71)
	at br.com.duxsolutions.repository.GrupoContaRepository.contaCount(GrupoContaRepository.java:43)
	at br.com.duxsolutions.bean.ContasBean.geraCodigoConta(ContasBean.java:238)

Bem, o meu Id é Integer então o relacionamento será Integer tb, correto ?

Hebert_Coelho
Diego Adriano:
Bem, veja como fica se eu passar um Long
public Integer contaCount(Long id)

Grave: java.lang.IllegalArgumentException: Parameter value [1] was not matching type [java.lang.Integer]
	at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:360)
	at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:354)
	at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:71)
	at br.com.duxsolutions.repository.GrupoContaRepository.contaCount(GrupoContaRepository.java:43)
	at br.com.duxsolutions.bean.ContasBean.geraCodigoConta(ContasBean.java:238)

Bem, o meu Id é Integer então o relacionamento será Integer tb, correto ?

Cara, você entende o código que você está mexendo? Parou para analisar o código e entender o código? Ou o que você está fazendo? Parou para pensar que você está passando um parâmetro em uma query que exige um valor igual? talvez falta alterar sua classe?

Diego_Adriano

Sim, analisei o que estou fazendo.
Quero retorna a quantidade de “IDs” inseridos com o Relacionamento passado.

Agora, um Count ele retorna um Integer ou Long ? Pois a consulta funciona no SQL então a forma que estou fazendo esta correta não esta ?

Alterar a Classe ? Pq ?

Hebert_Coelho

Diego Adriano:
Sim, analisei o que estou fazendo.
Quero retorna a quantidade de “IDs” inseridos com o Relacionamento passado.

Agora, um Count ele retorna um Integer ou Long ? Pois a consulta funciona no SQL então a forma que estou fazendo esta correta não esta ?

Alterar a Classe ? Pq ?

Você precisa alterar caso sua classe seja long.
Para utilizar count veja aqui como se faz: JPA Consultas e Dicas.

Diego_Adriano

Resolvi, o Count retorna um Long, por isso estava dando erro:

public Long contaCount(Integer id){ Query query = this.entityManager.createNamedQuery("contacontabil.count"); query.setParameter("id", id); return (Long) query.getSingleResult(); }

Vou dar uma lida … Seus tópicos são excelentes !!

Criado 31 de agosto de 2012
Ultima resposta 31 de ago. de 2012
Respostas 9
Participantes 4