Select com Hibernate - Nome das Colunas

6 respostas
J

Bom dia pessoal.

Não sei se essa seria a area correta do forum… mas estou iniciando em Java e Hibernate e estou com algumas dificuldades.

Fiz um Select utilizando o Hibernate, funcionou, consegui pegar os valores da cosnulta.
Porém eu gostaria de pegar juntamente com os valores o nome das colunas de forma automatica.

segue o codigo que estou utilizando:

Session sess = getSessionFactory().openSession();
            List<Object[]> query = sess.createSQLQuery("select * from contacorrente").list();                            
            for ( Object[] qry:query )
            {                                              
                 System.out.println("Banco: " + qry[0]);
                 System.out.println("Agencia: " + qry[1]);
                 System.out.println("Conta: " + qry[2]);    
                /*  aqui de vez colocar o nome das colunas de forma fixa (Banco,Agencia, etc..) eu queria pegar o nome de forma automatica. */
            }          
           sess.close();

Esse código retorna o conteudo de cada campo corretamente, mas como poderia pegar o nome das colunas que esse select retornou tambem?

Obrigado, qualquer ajuda é bem vinda.

Abraço!

6 Respostas

W

ou mano, tu tem que usar SQL Query mesmo?

Não pode usar HQL que já retorna o objeto preenchido?

T

Como o walacy comentou, seria melhor usar criteria do hibernate ou uma query jpa.
Com criteria, seria algo como:

Session sess = getSessionFactory().openSession(); sess.createCriteria(ContaCorrente.class).list(); sess.close();

J

walacy:
ou mano, tu tem que usar SQL Query mesmo?

Não pode usar HQL que já retorna o objeto preenchido?

Hmm certo…
mas como eu pegaria o nome da coluna e o seu conteudo utilizando HQL?
Poderia me dar um pequeno exemplo?

Valeu Walacy.

Abraço.

T
jkirch:
walacy:
ou mano, tu tem que usar SQL Query mesmo?

Não pode usar HQL que já retorna o objeto preenchido?

Hmm certo...
mas como eu pegaria o nome da coluna e o seu conteudo utilizando HQL?
Poderia me dar um pequeno exemplo?

Valeu Walacy.

Abraço.

Com HQL, seria algo parecido com isto:

Session sess = getSessionFactory().openSession();
Query query = sess.createQuery("SELECT o FROM ContaCorrente o");
List&lt;ContaCorrente&gt; contas = (List&lt;ContaCorrente&gt;) query.getResultList();

// Pegando valores
for(ContaCorrente conta : contas){
	System.out.println("Banco: " + conta.getBanco());
	// ...
}
J

hmm… obrigado Thiago.
Mas ainda estou com alguns problemas.

Esse meu código seria usado em um Frame de consulta generico, usado em todas as minhas classes, entao eu nao poderia criar uma lista de ContaCorrente, porque ao invés de ContaCorrente poderia ser Pessoas, Grupos, etc… me entende? Sabe me dizer o que eu poderia fazer?

Além disso, como eu poderia pegar o nome da coluna de forma automatica, pois não vou poder colocar o "Banco: " fixo no println ?

Agradeço a ajuda.

Valeu! Abraço!

T

jkirch:
hmm… obrigado Thiago.
Mas ainda estou com alguns problemas.

Esse meu código seria usado em um Frame de consulta generico, usado em todas as minhas classes, entao eu nao poderia criar uma lista de ContaCorrente, porque ao invés de ContaCorrente poderia ser Pessoas, Grupos, etc… me entende? Sabe me dizer o que eu poderia fazer?

Além disso, como eu poderia pegar o nome da coluna de forma automatica, pois não vou poder colocar o "Banco: " fixo no println ?

Agradeço a ajuda.

Valeu! Abraço!


Se você precisa usar um mesmo método para consultar dados de tabelas diferentes, teria que criar um método bem mais genérico, já que cada tabela normalmente tem um número de colunas diferentes. Acredito que você precisaria criar um método usando reflections, mas não sei se isto valeria “tanto” a pena para seu sistema, ao invés de criar um método para cada entidade.

Acho que vale a pena usar criteria do hibernate ou até mesmo hql jpa, ao invés de criar querys nativas. Pois se você está usando hibernate, o ideal seria usar os recursos do mesmo. Para criar querys nativas, não precisaria usar hibernate ou jpa, basta usar jdbc, IMHO.

Criado 25 de março de 2010
Ultima resposta 25 de mar. de 2010
Respostas 6
Participantes 3