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,