[RESOLVIDO] Hibernate - Criteria Restrictions

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!

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.,

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

Olá amigo.

[code]

    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;
   }[/code]

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

Valeu André :slight_smile:

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