[RESOLVIDO]Ajuda com Cast em consulta

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 ?

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

Alguma outra forma sem mexer na estrutura da tabela ?

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;

[quote=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;[/quote]+1

Bem, veja como fica se eu passar um Long

[code]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)[/code]

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

[quote=Diego Adriano]Bem, veja como fica se eu passar um Long

[code]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)[/code]

Bem, o meu Id é Integer então o relacionamento será Integer tb, correto ?[/quote]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?

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 ?

[quote=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 ?[/quote]Você precisa alterar caso sua classe seja long.
Para utilizar count veja aqui como se faz: JPA Consultas e Dicas.

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 !!