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