createSQLQuery não devolve arrayList de Objetos

9 respostas
wilsontads

Pessoal, eu estou fazendo usando createSQLQuery pra uma consulta em duas tabelas, com inner join e quero ter como retorno um arraylist conforme método abaixo:

public List<MetasProjecao> listarPorHQLL(String hql) throws BusinessException {
    try {
     
     Query query = getSession().createSQLQuery( "SELECT M.COD_VENDEDOR,"+
       "V.FANTASIA"+
       " M.META_CLIENTES, M.CLIENTES " +
       " FROM META M " +
       " INNER JOIN VENDEDOR V ON (M.COD_VENDEDOR = V.COD_VENDEDOR) " +
       " ORDER BY V.FANTASIA").addEntity("meta", MetasProjecao.class);     
    return  query.list();     
    } catch (Exception e) {
     throw new BusinessException(e);
    }
  }

só que ao invés de ele me devolver um arraylist de objetos, ele me devolve um array de objetos..
alguém aqui sabe como posso resolver?

9 Respostas

leoramos

Wilson, ele tá te retornando um Object[] porquê tu tá fazendo SQL puro.
Uma maneira de fazer a conversão é usar um ResultTransformer, como AliasToBeanTransformer.
Vais ter que colocar cada campo da pesquisa com um alias de nome igual ao teu atributo no bean destino da transformação.
Não sei se fui claro, mas já é um norte.
Abraço!

wilsontads

Sabe me dizer algum exemplo de como fazer algo parecido ?

wilsontads

Desculpe, man… na verdade, já tentei fazer dessa forma, porém
ele retornava dois objetos, meta e vendedor e no entanto deveria retornar um arraylist só com todos os campos pesquisados, certo?. =\

leoramos

Tem na própria documentação do Hibernate:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html

Cara, pela velocidade da tua resposta, faltou ao menos você pegar os termos que eu te passei e jogar no google.
Não tô querendo ser grosso, mas metade ou mais do nosso trabalho é pesquisa, e tenho certeza que tu sabes disso.

Tá aí o link, tá fácil de achar ali. Qualquer dúvida, só postar que a gente dá uma força.

Abraço!

wilsontads

Na verdade, eu pedi se tinha algum exemplo, por que conforme eu disse no tópico anterior, eu já tentei fazer AliasToBeanTransformer,
só que ele tava me retornando 2 objetos, e eu to tentando pegar, somente 1 arrayList de objetos.

wilsontads

Me corrija se eu estiver errado:

public List<MetasProjecao> listarPorHQLL(String hql) throws BusinessException {  
    try {  
       
     Query query = getSession().createSQLQuery( "SELECT M.COD_VENDEDOR,"+  
       "V.FANTASIA"+  
       " M.META_CLIENTES, M.CLIENTES " +  
       " FROM META M " +  
       " INNER JOIN VENDEDOR V ON (M.COD_VENDEDOR = V.COD_VENDEDOR) " +  
       " ORDER BY V.FANTASIA")
     .addEntity("meta", MetasProjecao.class);       
     .addJoin("vendedor", Vendedor.class);
    return  query.list();       
    } catch (Exception e) {  
     throw new BusinessException(e);  
    }  
  }
leoramos

Cara, que dois objetos ele está te trazendo? Agora minha cabeça entortou com o teu caso hehe
Agora, se há um relacionamento dessas tabelas, rola tu fazer isso aí com HQL mesmo, cara, pelo que eu tô vendo.
Pra ser mais claro, pra que eu realmente pudesse te ajudar, eu ia precisar da tua classe Vendedor e MetasProjecao. Podes postar?
Abraço!

M

voce pode converter o resultado em um List de uma determinada classe, basta coloquar alias nos campos listados de sua query com o nome do atributo de sua classe
e acrescentar antes de query.list() esta linha

nao precisa ser uma entity mas tem que implementar serializable na classe

A

marciavilaca:
voce pode converter o resultado em um List de uma determinada classe, basta coloquar alias nos campos listados de sua query com o nome do atributo de sua classe
e acrescentar antes de query.list() esta linha

nao precisa ser uma entity mas tem que implementar serializable na classe

Meu amigo, parabéns, eu estava com a mesma dificuldade do wilsontads, e fiz o que vc disse e aqui funcionou perfeitamente, obrigado por compartilhar.

Abraços
Anderson

Criado 14 de julho de 2011
Ultima resposta 19 de out. de 2011
Respostas 9
Participantes 4