[RESOLVIDO] Hibernate - Criteria Restrictions

5 respostas
B

Olá Pessoal, bom dia!

Estou querendo fazer uma Criteria que traga alguns resultados, filtrando por Nome OU por CNPJ, porém não sei como fazer esse OU.
Meu código é o seguinte

Criteria c = this.session.createCriteria(Cliente.class);
c.add(Restrictions.ilike("nome", term + "%"));
c.add(Restrictions.ilike("cnpj", term + "%"));
c.addOrder(Order.asc("nome"));

Como digo isso pro Hibernate?

Obrigado!

5 Respostas

R

Na verdade é bem fácil, você pode usar o Restrictions.or() que recebe os outros 2.

Exemplo:

Criteria c = this.session.createCriteria(Cliente.class);  
c.add(Restrictions.or(Restrictions.ilike("nome", term + "%"), Restrictions.ilike("cnpj", term + "%"));
c.addOrder(Order.asc("nome"));

Edit: Outro ponto, eu notei que você está concatenando um “%” aí no meio para usar o like, mas o Criteria tem um jeito próprio de fazer isso também.

Caso queira que a String comece com o valor que você enviou, o que seria assim no SQL

você faz assim

c.add(Restrictions.ilike("nome", term, MatchMode.START);

Existem outros “Match Modes”, dê uma pesquisada que vão te ajudar nessas situações :slight_smile:

Att.,

B

Putz, que falta de atenção! rs
Valeu cara!
Abraço!

A

Olá amigo.

public boolean selectLogin(Login l){
           Session session = getSession();
           List<Login>list = null;
           String login = l.getLogin();
           String senha = l.getSenha();
           boolean validLogin = false;
           Transaction t = session.beginTransaction();
           Criteria select = session.createCriteria(Login.class);
           select.add(
                    Restrictions.and(Restrictions.eq("login", login), Restrictions.eq("senha",senha))
                   );
           list = select.list();
           
           if(list.isEmpty()){
               validLogin = false;
           }else{
               validLogin=true;
           }
           return validLogin;
       }
Esse é um código para login que eu fiz aqui... Ele está usando o juntor AND, mas para usar o OR basta colocar
Restrictions.or(Restrictions.eq("login", login), Restrictions.eq("senha",senha))
Onde login e senha são duas variáveis que recebem parâmetros de fora... No seu caso seria mais ou menos assim:
Criteria c = this.session.createCriteria(Cliente.class);  
    c.add(
              Restrictions.or(Restrictions.eq("nome", term +"%"), Restrictions.eq("cnpj",term+"%"))
);
c.addOrder(Order.asc("nome"));

Abraçoss

B

Valeu André :slight_smile:

B

Se alguém puder dar um help agradeço.

criteria.add(
			Restrictions.and(
				Restrictions.ilike("internalTrackingNumber", "%"+dto.getInternalTrackingNumber()+"%"),
				Restrictions.or(
					Restrictions.ilike("courtDocketNumber", "%"+dto.getCourtDocketNumber()+"%"),
					Restrictions.or(
						Restrictions.eq("country.countryid", dto.getCountryid()),
						Restrictions.or(
								Restrictions.eq("userInhouse.userid", dto.getUserInhouseid()),
								Restrictions.eq("userOutside.userid", dto.getUserOutsideid())								
						)
					)
				)
			)
		);

recebo as variáveis como parametro, e jogo no restrictions, problema que percebi que estou usando errado para a busca que eu qro, pois nem sempre todas as variáveis vem com valor. então a busca acaba trazendo todo mundo. minha duvida é: tem como eu usar o criteria sem ter que jogar tudo isso dentro de varios if’s verificando qual variável esta vindo preenchida?

[]'s

Criado 29 de novembro de 2011
Ultima resposta 7 de mar. de 2013
Respostas 5
Participantes 4