ola pessoal…ja vi varios exemplos de ilike com criteria…mas eu gostria de fazer isso com o hql…
hj a minha coonsulta é assim
em.createQuery("from Empresa as e where e.nome = '%"+parametro+"%'")
o problema dela é que esta case sensitive… alguem conhece algum operador ou modo que eu possa fazer esta consulta no modo case insesitive???
vlw pessoal t+!!!
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:
Dê uma pesquisada na api Criteria que tem o ilike… e varias outras opções para se usar no hibernate…
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!!!
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);
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:
[code]where lower(Empresa1) = lower(EMPRESA1)
// traduzindo
where empresa1 = empresa1[/code]Blz? Flw! :thumbup:
Oi maikel.souza
Meio complicado isso não? Creio que a outra forma seja mais clara.
Flw! :thumbup:
É 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:
malsan
Junho 19, 2008, 8:26am
#9
[quote=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: [/quote]
Tirou as palavras da minha boca, Woodstock!
é 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
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:
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+++
malsan
Junho 19, 2008, 8:45am
#13
Fala sério!
Esquenta não! Isso acontece com todo mundo, eu acho…
Aquele abraço!!!
San
Gente comecei hql hj e não to entendo direito
tipo queru fazer uma consulta no banco
alguem tem um exemplo facinho ai?
vw galera
Vlw Juliano grande ajuda cara
BrunoOM
Setembro 13, 2012, 2:36pm
#17
Experimenta fazer antes dessa linha:
empresa=empresa.toLowerCase();
e não altere em "where lower(e.nome)…
Veja se isso dá certo pra você