Hibernate: "O que é creiteria?"

4 respostas
paulopatto

Caros colegas, bom dia.

Antes de que me venham com paus e pedras (inquisição), gostaria de informar que tentei de todas formas no Google.com e no próprio serach do forum. Porém não achei.

Minha dúvida é idiota eu sei mas estou iniciando com hibernate (sempre utilizei JDBC puro) e sempre vejo o pessoal falando que “…a grande vantagem desta implementação do JPA é o criteria…”, ou “…a vantagem do hibernate sobre o toplink? Só a criteria já basta…”.

Bem em suma, que diabos é ‘CRITERIA’?

E aproveitando, é possível usar anotação do hibernate com o Tomcat?

Desde já agradeço a atenção e compreensão de todos.

4 Respostas

W

Nao sei se eh isso que vc esta perguntando mas a Criteria API do hibernate eh uma maneira de eliminar o SQL-like queries no seu codigo, por exemplo:

Se vc tem um um mapped object chamado Usuario e vc quer obter todos os usuarios que tem entre 20 e 30 anos de idade.
Usando um SQL comum ficaria algo do tipo :

from Usuario where idade >=:idade and idade <=:idade

usando criteria ficaria assim :

session.createCriteria(Usuario.class)
.add(Expression.between("idade", minIdade, maxIdade));

Mesma coisa agora ordenando:

session.createCriteria(Usuario.class)
.add(Expression.between("idade", minIdade, MaxIdade))
.addOrder( Order.desc("idade"));

Pra mim eh muito mais “elegante” e muito mais legivel e tb eh muito melhor quando vc tem a necessidade de criar queries dependendo das opcoes que o seu usuario selecionou no sistema, por exemplo.

Usando o exemplo que eu passei primeiro, se vc deixasse a escolha do usuario de selecionar ASC ou DESC, se vc fosse fazer isso do jeito tradicional vc teria que ficar concatenando strings e ficaria um codigo horrivel. Usando Criteria, ficaria algo assim:

Criteria criteria = session.createCriteria(Usuario.class);
criteria.add(Expression.between("idade", minIdade, MaxIdade));

if(orderByIdadeDesc)
    criteria.addOrder( Order.desc("idade"));
else if (orderByIdadeAsc) 
    criteria.addOrder( Order.asc("idade"));

List users = criteria.list();

Este eh um exemplo “sacal” mas eu acho que exemplifica bem porque eh interessante o uso de Criteria.

Quanto a usar hibernate annotations com tomcat, meu conhecimento de hibernate eh muito limitado, mas eu acho que eh possivel sim por favor me corrijam se eh estiver errado.

//Daniel

paulopatto

Daniel, bom dia.

Cara muito obrigado e perfeito entendi perfeitamente o que é criteria. Valeu mesmo.

Grato

P.S.: Se o administrador quiser por mim pode se dar o tópico por encerrado.

renatocustodio

Sim, é possível. Até mesmo em aplicação swing é possível. Claro que não vai dar pra fazer a injeção automática da sua entityManager, e outras coisas que o container do jboss, glassFish, etc podem fazer automatico. Mas mesmo assim vc ainda pode fazer manual.

paulopatto

Vlw Renato.

Muito obrigado.

Criado 23 de setembro de 2008
Ultima resposta 24 de set. de 2008
Respostas 4
Participantes 3