Retorno de busca no hibernate

5 respostas
V

seguinte
uso tambem o struts …
preciso povoar uma combo de um jsp com o resultado de uma consulta no banco, porem tenho que usar o distinc na query

no meu action

List listaAno = gerPersist.find("select distinct(c.ano) from " + Calendario.class.getName() + " as c"); request.setAttribute("listaAno", listaAno);

no meu jsp

<html:select property="idAnoSel" onchange="metodo.value='filtrar'" name="calendarioForm" styleClass="textBox"> <html:options collection="listaAno" property="ano" labelProperty="ano"/>

struts-config

<form-property name="idAnoSel" type="java.lang.String" /> //acho ate que nem precisa dessa lista aqui <form-property name="listaAno" type="java.lang.String[]" />

o que ta pegando: o tipo de retorno da busca não é um objeto Calendario por causa da clausula distinct, ou seja o jsp não acha um metodo getAno() para o meu property ano…

ja tentei fazer a query retornar para uma lista e dessa povoar um objeto calendario e então povoar outra lista com esse objetos porem tambem não deu certo pois a classe calendario e de persistencia

como vou fazer isso ?

5 Respostas

V

eu não me expliquei bem ?
niguem sabe ?
ou e boicote ?

A

Vc está brincando ou realmente está reclamando pq alguém ainda não respondeu sua pergunta em 16 minutos após ter postado??

V

e so pra jogar o topico para cima nos recentes

A

Acredito que o erro está na forma como o resultado da consulta esta sendo retornado…
Ele deve estar retornando um ArrayList indexado e o acesso aos elementos deveria ser feito assim listaAno [0,0]… [1,0] …

Pesquise por setResultTransformer() e Transformers.ALIAS_TO_MAP para obter o resultado com o valor/entidade

Ou crie uma classe somente para popular o resultado e utilize
select new MeuObjeto()

passos

Solução porca:

List l = gerPersist.find("select distinct(c.ano), c from " + Calendario.class.getName() + " as c");
       
        List newList = new ArrayList();
        for (Iterator iter = l.iterator(); iter.hasNext();) {
            Object[] obj = (Object[]) iter.next();
            newList.add( obj[1] );
        }

        request.setAttribute("newList", listaAno);

OBS: Da uma procurada na documentacao pra ver se nao tem uma solucao mais elegante.

Criado 3 de outubro de 2006
Ultima resposta 3 de out. de 2006
Respostas 5
Participantes 3