Pessoal to apanhando do Hibernate… rs se alguem já passou por essa situação e puder ajudar…
é o seguinte tenho o seguinte metodo
public List<RelatorioStausTarefaProjetoModel> statusTarefaProjeto(){
Session session = factory.openSession();
Query query = session.createQuery("SELECT chaveComposta.projeto.id, status, COUNT(*) AS numTarProj FROM ProjetoTarefa pt GROUP BY status, chaveComposta.projeto.id");
return query.list();
}
mas na hora que vou usar tipo
public static void main(String[] args) {
GenericDaoHibernateImpl<RelatorioStausTarefaProjetoModel, Integer> daoRelStatProj = new GenericDaoHibernateImpl<RelatorioStausTarefaProjetoModel, Integer>(RelatorioStausTarefaProjetoModel.class);
List<RelatorioStausTarefaProjetoModel> rel = daoRelStatProj.statusTarefaProjeto();
System.out.println(rel.get(0).getCont());
}
Da esse erro…
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to modelo.RelatorioStausTarefaProjetoModel
at relatorio.RelatorioStatusTarefasProjeto.main(RelatorioStatusTarefasProjeto.java:37)
e parece que ele te retornando uma lista de List corretamente mais o conteudo dela ta vindo um tudo object
Observe :
Hibernate: select projetotar0_.idprojeto as col_0_0_, projetotar0_.status as col_1_0_, count((projetotar0_.idprojeto, projetotar0_.idtarefa)) as col_2_0_ from projetotarefa projetotar0_ group by projetotar0_.status , projetotar0_.idprojeto
2010-06-17 20:55:19,094 DEBUG org.hibernate.jdbc.AbstractBatcher about to open ResultSet (open ResultSets: 0, globally: 0)
2010-06-17 20:55:19,094 DEBUG org.hibernate.loader.Loader result row:
2010-06-17 20:55:19,094 DEBUG org.hibernate.loader.Loader result row:
2010-06-17 20:55:19,094 DEBUG org.hibernate.loader.Loader result row:
2010-06-17 20:55:19,094 DEBUG org.hibernate.loader.Loader result row:
2010-06-17 20:55:19,094 DEBUG org.hibernate.loader.Loader result row:
2010-06-17 20:55:19,094 DEBUG org.hibernate.loader.Loader result row:
2010-06-17 20:55:19,094 DEBUG org.hibernate.loader.Loader result row:
mas só que não tem como eu iterar em cima do atributo
...
// Antes do return
//return query.list();
List<Object[]> objs = query.list();
return objs;
...
Dai coloca um break point na linha do list<object[]>, veja quais objetos tem dentro dai para trabalhar com eles.
Acho que seja esse linha… to suspentando dela. srsrs
Dai cada posição do array do object vc vai fazer um cast, por exemplo:
posição 0: id - deve ser um Integer
posição 1: status - deve ser um Integer ou um boolean
posição 2: count - um Long
Com isso vc faz o cast e monta o list do objeto model que você vai retornar.
Se vc usa uma IDE, pode ver a hierarquia com os tipos retornados destes objetos.
List<Object[]> objs = query.list();
// Aqui vai ser manipulado o objs.
//Cria suaLiistaModel
for(int i=0;objs....i++){
Object[] aux = obj.get(i);
//Objeto que sualistaModel recebe, vamos chamar de x
x.setId((Integer)aux[0]) // id
x.setStatus.......
suaListaModel.add(x);
}
return suaListaModel;
Mais ou menos isso que tinha falado.
Acho que isso deve resolver seu problema
Fala ai cara cheguei no trabalho a primeira coisa que fiz foi terminar esse relatorio… agradeço MUITO a sua ajuda… Obrigado mesmo…
Para ajudar aos demais membros que possam vir a ter o mesmo problema vou postar o metodo …
public List<RelatorioStausTarefaProjetoModel> statusTarefaProjeto(){
Session session = factory.openSession();
Query query = session.createQuery("SELECT chaveComposta.projeto.id, status, COUNT(*) FROM ProjetoTarefa pt GROUP BY status, chaveComposta.projeto.id");
List<Object[]> objs = query.list();
// Aqui vai ser manipulado o objs.
//Cria suaLiistaModel
List<RelatorioStausTarefaProjetoModel> relList = new ArrayList<RelatorioStausTarefaProjetoModel>();
for (Object[] o : objs) {
Object[] aux = o;
RelatorioStausTarefaProjetoModel r = new RelatorioStausTarefaProjetoModel();
//Objeto que sualistaModel recebe, vamos chamar de x
r.setIdprojeto((Integer)aux[0]); // id
r.setStatus((StatusTarefa)aux[1]);
r.setCont((Long)aux[2]);
relList.add(r);
}
return relList;
}
galera, estou tendo o mesmo problema em algumas tabelas minhas . reparei q esse problema soh ocorre qdo meu objeto possui Collection, esta certo agir do jeito citado ???
a meu ver o hibernate serve justamente pra evitarmos de ficar trabalhando relacionalmente e trabalharmos com o Objeto em si e fazer isso iria contra o propósito do framework , ou estou enganado ?