[RESOLVIDO]Problema no cast Ljava.lang.Object retornado de um org.hibernate.Query

Amigos, estou com problema em fazer cast de uma lista de objetos retornado do metodo list() de uma query do hibernate, no momento de mostrar os dados retornados do list() ele retorna o erro:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to Utils.DadosRelatorio
	at Teste.TesteDocumentoConsulta.testeRelatorioClassificacaoCNMP(TesteDocumentoConsulta.java:86)
	at Teste.TesteDocumentoConsulta.main(TesteDocumentoConsulta.java:22)

Meu método de retorno:

public List<DadosRelatorio> RelatorioCNMPPorGrupoOficio(Integer nroGrupoOficioAtuacao,Date dtaChegadaInicio,Date dtaChegadaFim) {
		
		
		String query = 
				"select i.codigo as codigoItem, " +
				"i.nome as nomeItem, " +
				"tido.tidoNome as tipoDocumentoNome," +
				"count(*) as totalItens " +
				"from Auto a, Itens i,Documento doc," +
				"GrupoOficioAtuacao gofa, TipoDocumento tido " +
				"where a.codigoClasse=i.codigo " +
				"and i.tipoItem='C' " +
				"and a.autoNumero=doc.auto " +
				"and doc.gofaNumero=gofa.gofaNumero " +
				"and doc.tidoNumero=tido.tidoNumero " +
				"and doc.gofaNumero=:nroGofa " +
				"and doc.docDataChegada>=:dataInicio " +
				"and doc.docDataChegada<=:dataFim " +
				"group by i.codigo,i.nome,tido.tidoNome,gofa.gofaNome " +
				"order by gofa.gofaNome)";
		Query consulta = session.createQuery(query);
		consulta.setInteger("nroGofa",nroGrupoOficioAtuacao);
		consulta.setDate("dataInicio",dtaChegadaInicio);
		consulta.setDate("dataFim",dtaChegadaFim);
		
		
		
		return consulta.list();
	}

Classe que estou tentando fazer cast:

public class DadosRelatorio {
	
	 Long 	codigoItem;
	 String nomeItem;
	 String tipoDocumentoNome;
	 Long 	totalItens;
	 
	public Long getCodigoItem() {
		return codigoItem;
	}
	public void setCodigoItem(Long codigoItem) {
		this.codigoItem = codigoItem;
	}
	public String getNomeItem() {
		return nomeItem;
	}
	public void setNomeItem(String nomeItem) {
		this.nomeItem = nomeItem;
	}
	public String getTipoDocumentoNome() {
		return tipoDocumentoNome;
	}
	public void setTipoDocumentoNome(String tipoDocumentoNome) {
		this.tipoDocumentoNome = tipoDocumentoNome;
	}
	public Long getTotalItens() {
		return totalItens;
	}
	public void setTotalItens(Long totalItens) {
		this.totalItens = totalItens;
	} 
}

Já tentei fazer o cast direto no retorno do método, mas não deu certo, não estou conseguindo listar os dados que a list() me retorna.

Qualquer ajuda é bem-vinda

Quando vc faz…

select i.codigo as codigoItem, i.nome as nomeItem, tido.tidoNome as tipoDocumentoNome,…

vc está retornando um “new Object[x] { codigoItem, nomeItem, tipoDocumentoNome…}” e não o Objeto DadosRelatorio.

Vc terá converter isso manualmente.

List<DadosRelatorio> result = new ArrayList<DadosRelatorio>();
for(Object[] obj : consulta.list()) {
  DadosRelatorio data = new DadosRelatorio();
  data.setCodigoItem((Long)obj[0]);
  .
  .
  .
  .
  result.add(data);
}
return result;

Cara seguinte…
vc pode retornar uma classe ja setada…

new br.com.seuprojeto.Transfer(codigo, nomeItem .....);

sua query retorna um Array de Object "Object[]"
cara vc queira uma lista de Resultado
tenta

Resolvi meu problema com esse post:

http://www.guj.com.br/java/222571-resolvidoerro-em-criteria-no-hibernate

	public List<DadosRelatorio> RelatorioCNMPPorGrupoOficio(Integer nroGrupoOficioAtuacao,Date dtaChegadaInicio,Date dtaChegadaFim) {
				
		String query = 
				"select i.codigo as codigoItem, " +
				"i.nome as nomeItem, " +
				"tido.tidoNome as tipoDocumentoNome," +
				"count(*) as totalItens " +
				"from Auto a, Itens i,Documento doc," +
				"GrupoOficioAtuacao gofa, TipoDocumento tido " +
				"where a.codigoClasse=i.codigo " +
				"and i.tipoItem='C' " +
				"and a.autoNumero=doc.auto " +
				"and doc.gofaNumero=gofa.gofaNumero " +
				"and doc.tidoNumero=tido.tidoNumero " +
				"and doc.gofaNumero=:nroGofa " +
				"and doc.docDataChegada>=:dataInicio " +
				"and doc.docDataChegada<=:dataFim " +
				"group by i.codigo,i.nome,tido.tidoNome,gofa.gofaNome " +
				"order by gofa.gofaNome)";
		Query consulta = session.createQuery(query);
		consulta.setInteger("nroGofa",nroGrupoOficioAtuacao);
		consulta.setDate("dataInicio",dtaChegadaInicio);
		consulta.setDate("dataFim",dtaChegadaFim);
		
		consulta.setResultTransformer(Transformers.aliasToBean(DadosRelatorio.class));//Sem isso aqui impossível de retornar
		
		List<DadosRelatorio> relatorioCNMP = consulta.list(); 
		return relatorioCNMP;
	}

mauriciot.silva ei cara muito obrigado.

Cara, valeu mesmo!
essa linha me ajudou também!

1 curtida