olá Pessoal,
Se você está iniciando com Hibernate um dia vai ser apresentado ao Criteria. Realmente quem usa Criteria não quer voltar ao SQL para as funções mais básicas, e sim para os casos extremos onde o Criteria não atende a um requisito que só temos no SQL. Então neste post, vou mostrar um pouco o que se pode fazer com o Criteria nas suas aplicações Java. Farei uma breve introdução ao Criteria neste primeiro post, no próximo, vamos colocar mão na massa de fato. Mas, por enquanto quero que conheçam um pouco a sintaxe.
Lets go…
Criteria
Criteria Query API permite construir query expression em Java permitindo assim a checagem em tempo de compilação, ao contrário do HQL ou SQL que não permite. Criteria API permite de forma programática construir objetos query a partir da interface org.hibernate.Criteria. Esta interface define os métodos disponíveis que precisamos trabalhar com Criteria.
Para persistir um objeto da classe, usamos o método createCriteria() que retorna um objeto Criteria que permite ter acesso a instância de persistência da classe. O createCriteria() pertence a interface Session. Então se preciso retornar todas propriedades de uma classe com Criteria, seria assim:
Criteria critera = session.createCriteria(Produto.class)
List lista = criteria.list();
Mais simples que HQL. Este é o mesmo resultado com o from Produtos que executamos no HQL e que fazemos no SQL: SELECT * from mytable.
Vamos dizer que precisamos obter os produtos que tenham no nome “smart phone” então precisamos conhecer o método add() da classe Criteria que tem como objetivo adicionar uma restrição em seu argumento. Uma outra classe importante é Restrictions class do pacote org.hibernate.Criterion que possui métodos static para as condições de restrições que precisamos. Veja o trecho do código:
Criteria crit = sesion.createCriteria(Produto.class)
crti.add(Resctrictions.eq(“nome”, “smart phone”);
List list = crit.list();
Explicando o código:
Na primeira linha criamos o objeto Criteria que fez a persistência em nossa entidade. Na linha dois costumo ler da seguinte forma para facilitar a compreensão: “adicionando uma restrição a class persistida”. Na linha 3 é o resultado da restrição.
Um ponto importante é que não podemos fazer uma restrição de resultado usando o método eq/ne para propriedades com o valor null. Para isso há um método static especifico o isNull() e o isNotNull().
Para realizar busca temos os métodos like() e ilike() estes servem quando precisamos buscar algo fornecendo “meia duzia” de informação para o buscador. Exemplo: traga todos os produtos que tem na palavra “smart”. A diferença é que o ilike é case-insensitive.
Outro detalhe importante que podemos informar aonde buscaremos a palavra, ou seja, no inicio, no final, ser exato, ou em qualquer lugar. Exemplo:
Criteria crit = session.createCriteria(Produto.class)
crit.add(Restrictions.like(“nome”, “smart%”));
List list = crit.list();
% informa que busca por partes da string. No exemplo a seguir digo para buscar no final da String.
Crit.add(Restrictions.like(“nome”, “smart”, MatchMode.end));
MatchMode é um tipo de enumeration que possui 4 tipos diferentes de match: anywhere, end, exact, start.
Done! E assim finalizo o primeiro post sobre Criteria, no próximo veremos mais algumas restrições interessantes.
Espero que tenham gostado do post.
Abracos, see you next post! 🙂
Muito bom Camilo…veio bem a calhar pois estava com dúvidas a respeito do funcionamento do Criteria….vlvw!
VLW CARA OBRIGADO!
Cara, você me fez compreender em 10 min, o que ha 2 dias estava tentando entender na documentação. Vlw Mesmo!
opa! Helsen,
obrigado pelo feedback, fico feliz em saber que o post ajudou vc entender 😀
abracos,
Parabéns pelo post!
Claro e Objetivo…
Perfeito!!
E esse plágio ai fera!!!
Guilherme,
Se vc me provar que algum conteudo no meu blog é plágio eu paro de escrever. Na verdade vc sabe o que é plágio?