HQL não tem a operação ilike, mas para obter o mesmo resultado você pode usar as funções lower() ou upper():
String hql = "from Empresa as e where lower(e.nome) = lower(:busca)";
Query query = session.createQuery(hql);
q.setParameter("busca", "%" + parametro + "%");Blz? Flw! :thumbup:
L
leopoldof
Dê uma pesquisada na api Criteria que tem o ilike… e varias outras opções para se usar no hibernate…
V
Vanderbill
eu ja sabia dessas duas funcoes…mas elas ainda nao resolvem meu problema…
imagine que eu tenha
Empresa1
Empresa2
no banco…se ela comecar com maiscula…a consulta ja nao me trara resultados…
mas vou continuar tentando…vlw!!!
M
maikel.souza
Oi von.juliano
Eu utilizo like no meu trabalho da para fazer assim também:
String hql = "from Empresa as e where lower(e.nome) like lower('%' || :busca || '%' )";
Query query = session.createQuery(hql);
q.setParameter("busca", parametro);
V
von.juliano
Como não?
where lower(e.nome) = lower(:busca)
Esse trecho do código fará a comparação passando todos os caracteres para letras minúsculas, se você tiver no banco Empresa1 e buscar por EMPRESA1, ele fará uma comparação assim:
where lower(Empresa1) = lower(EMPRESA1)
// traduzindo
where empresa1 = empresa1
Blz? Flw! :thumbup:
V
von.juliano
Oi maikel.souza
Meio complicado isso não? Creio que a outra forma seja mais clara.
Flw! :thumbup:
M
maikel.souza
É que dessa forma eu estaria explicitando no hql os operadores like/ilike.
De qualquer forma eu gostei dessa outra maneira, deixa o código mais limpo.
Abraços :thumbup:
M
malsan
von.juliano:
HQL não tem a operação ilike, mas para obter o mesmo resultado você pode usar as funções lower() ou upper():
String hql = "from Empresa as e where lower(e.nome) = lower(:busca)";
Query query = session.createQuery(hql);
q.setParameter("busca", "%" + parametro + "%");Blz? Flw! :thumbup:
Tirou as palavras da minha boca, Woodstock!
V
Vanderbill
é mas vc nao considerou uma coisa… exemplo:
no banco esta nome = Wolks
em.createQuery("from Empresa as e where e.nome = lower('"+empresa+"')");
ele ira executar assim
em.createQuery("from Empresa as e where e.nome = 'wolks'");
entao nao trara o resultado esperado
nao é isso??? vlw pelaatencao
mas ainda nao tenho a resposta
V
von.juliano
Cara, você ainda não sacou:
where lower(e.nome)Isso garante que o valor vindo do seu banco será em letras minúsculas, então se você usar a função lower também no valor procurado, ambos serão avaliados com letras minúsculas.
Testa aí que você vai ver que funciona. Flw! :thumbup:
V
Vanderbill
nossa desculpem a todos…resolveu sim nao havia percebido o detalhe que colocaram lower no campo tambem…agora ficou certinho
em.createQuery("from Empresa as e where loewr(e.nome) = lower('"+empresa+"')");
vlw mesmo pessoa t+++
M
malsan
Fala sério!
Esquenta não! Isso acontece com todo mundo, eu acho…
Aquele abraço!!!
San