Top Posts

Entendendo JSP

Continue lendo

Criteria Hibernate parte II

Posted by camilolopes | Posted in Hibernate | Posted on 12-03-2011

3

opa! Pessoal,

Neste post veremos mais algumas restrições importantes que temos na API Criteria. Não deixarei de apresentar os codes, mais ainda não faremos nada pratico com o BD, reservei este momento para um outro post, onde vamos “respirar” toda série de modo mais prático em um único post, e focar mais no entendimento e uso do Criteria. Principalmente se você está começando agora nada melhor que ir passo-passo.

Lets go…

note: Uma coisa é certa: Quer aprender e melhorar seus conhecimentos? use a documentação, ela é tão explicativa quanto um tutorial passo-passo, uma das melhores documentações que já li, e o segredo não é decorar e sim ir implementado com base nas necessidade, crie situações (caso não tenha) e vá implementado aos poucos, quando menos esperar já vai está dominando as principais. Essa é minha dica. :)

Restrições com Criteria API

Uma outra restrição bem legal é o uso do >=, >, <=,< que fazemos no SQL,HQL etc. No Criteria temos métodos que nos ajudam na implementação desses operadores: gt(),ge(),lt(),le().

  • gt() = maior que

  • ge() = maior ou igual que

  • lt() = menor que

  • le() = menor ou igual que

Saber de onde os métodos pertencem é tão importante quando saber usá-los. Os citados acima vem da classe Resctrictions. Exemplo:

crit.add(Restrictions.ge(“preco”, new Double(100.00));

A leitura é bem simples: retorna todos os produtos com o preço maior ou igual 100.00. um dos pontos importante no uso de Criteria é quando precisamos usar AND e OR nas restrições.

crit.add(Restrictions.gt(“preco” new Double(100.0));

crit.add(Restrictions.like(“nome”, “smart%”));

List lista = crit.list();

A leitura é a seguinte: retorne produtos com o preco maior que 100.0 e (AND) que tenha o nome “smart” como parte da String.

Agora se precisarmos do OR, veja como fica:

Criterion preco = Restrictions.gt(“preco”, new Double(100.0));

Criterion nome = Resctrictions.like(“nome”, “smart%”);

LogicalExpression orExp = Resctrictions.or(preco,nome);

crit.add(orExp);

List list = crit.list();

A lógica é a seguinte: retorne produtos com preco maior que 100.0 ou que tenha “smart” na palavra. Na linha 4 adicionamos o resultado. Então a linha 2 somente é executada caso a primeira seja falsa.

Quando queremos mais que duas diferentes sequencias de OR poderíamos usar a classe Disjunction que fica em org.hibernate.Disjunction para representar uma disjunction. Sem sombras de duvidas usar disjunction é mais conveniente que vários OR no código, veja como fica:

Criterion preco = Resctrictions.gt(“preco”, new Double(100.0));

Criterion nome = Resctrictions.like(“nome”, “smart%”);

Criterion fornecedor = Restrictions.like(“fornecedor”, “nokia%”);

Disjunction dis = Resctrictions.disjunction();

dis.add(preco);

dis.add(nome);

dis.add(fornecedor);

cri.add(dis)

List lista = crit.list();

A leitura do código acima seria:

Retorne os produtos que tenha o preço maior que 100.0 ou (or) que tenha na parte da string a palavra “smart” ou que tenha na propriedade fornecedor a palavra “nokia”. Para fazer com o AND usamos o método conjunction() da classe Resctrictions.

Conjunction conj = Restrictions.conjuction();

Apenas alteramos de disjunction  para  a linha acima e assim temos a  clausula AND.

Vou ficando por aqui e espero que tenham gostado do post que foi simples e rápido.

See you next post, guys!!

abracos,

Related Posts with Thumbnails

Comments (3)

=) …. nice!

Esses comando são exclusivos para números, no meu caso preciso ver todos as previsões de pagamentos cadastrados a partir de uma data específica.
Eu fiz ( data between ‘dataEspecifica’ and ’31/12/2100′ )
Mas gostaria de (data >= ‘dataEspecifica’) tem como?

Good

Write a comment