Início > Banco de dados, Criteria, DB2 / Banco de dados, Hibernate, HQL, JAVA > Hibernate: HQL x Criteria

Hibernate: HQL x Criteria

É muito comum em entrevistas perguntarem as diferenças entre HQL e Criteria, ambos relacionados com Hibernate. Para quem não sabe, HQL quer dizer Hibernate Query Language.

O HQL é mais próximo do SQL, é mais utilizado para consultas fixas, que não tem alterações no número de parâmetros necessários.

O Criteria é mais voltado para consultas onde o número de parâmetros não é conhecido, como em listagens que contém N filtros, neste caso o Criteria é mais recomendado por montar uma instrução mais direcionada para a busca em questão, sem adicionar campos ou parâmetros desnecessários, o que acaba agilizando a consulta na base de dados.

O Criteria oferece ainda N métodos e parâmetros para realmente fazermos uma busca bem poderosa e personalizada.

Um exemplo de uso de criteria é este abaixo, onde já temos uma classe CIDADE mapeada no Hibernate:

Criteria c = getSession().createCriteria(Cidades.class); // criando o criteria para a classe cidade
c.add( Restrictions.eq(“estado.uf”, “SP”) ); // fazendo um filtro, no caso, onde estado == SP
List cidadesDeSaoPaulo = c.list(); // retornando a listagem – Fácil né?

O mais interessante ainda é que criteria tem vários métodos que podem nos auxiliar com as querys, por exemplo, trazer ordenado por descrição:

c.addOrder( Order.asc(“descricao”) );

Para setar a quantidade máxima de resultados, usamos o setMaxResults:

crit.setMaxResults(15);

Referências:

Mais sobre criteria pode ser obtido aqui.
Vários exemplos de consultas podem ser obtidas aqui.
Mais sobre HQL aqui.

Enjoy!

  1. Estudante JAVA
    agosto 20, 2009 às 12:18 pm

    Bom gostei de sua descrição, porem tenho um problema que gostaria que vc me desse um help, veja só tenho um list que traz todos os registros, fiz um SUM() usando criteria, mas como fazer com q o jsf traga o UNIQRESULT desse sum no final de minha lista num JSF..? A principio tentei retornar o resultado em uma variavél e depois chamá-la no jsf mas n aparece nada…

  2. outubro 22, 2010 às 12:40 pm

    Bom, ficou bem claro a distinção entre a Criteria e HQL, agora… Quais das duas formas os dariam mais desempenho?
    Não sei exatamente qual, ainda, más.. realizei um teste simples:
    Uma comboBox editável para filtrar uma busca de nomes(Pacientes) a cada tecla precionada, e após selecionar o nome desejado, carregar as informaçoes do Paciente no Formulário. Exemplo simples, no qual tive melhor desempenho com Criteria…

  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: