Back-End

5 abr, 2012

Criteria Hibernate na prática – Parte 02

Publicidade

Olá, pessoal! Na primeira parte deste artigo sobre Criteria, eu fiz uma introdução a respeito. Agora, vamos ver mais algumas restrições importantes que temos nesta API. Vamos lá?!

Criteria API

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

  • gt() = maior que
  • ge() = maior ou igual que
  • lt() = menor que
  • le() = menor ou igual que

Saber de onde os métodos vêm é tão importante quando saber usá-los. Os que estão citados acima vêm 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 a R$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 preço maior que R$100,00 e (AND) que tenham 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 preço maior do que R$100,00 ou que tenha “smart” na palavra. Na linha 04 adicionamos o resultado. Então, a linha 02 somente é executada caso a primeira seja falsa.

Quando queremos mais do que duas sequências diferentes de OR, podemos usar a classe Disjunction, que fica em org.hibernate.Disjunction para representar  uma disjunction. Sem sombras de dúvidas usar a disjunction é mais conveniente do 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.disjuntion();
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 do que R$100,00 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.

code Conjuction

Apenas a linha acima será alterada para atender a cláusula AND.

Vou ficando por aqui  e espero que tenham gostado do artigo!