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