Ilike com hql

16 respostas
V

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

16 Respostas

V

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

Dê uma pesquisada na api Criteria que tem o ilike… e varias outras opções para se usar no hibernate…

V

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

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

Oi maikel.souza

Meio complicado isso não? Creio que a outra forma seja mais clara.

Flw! :thumbup:

M

É 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

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

é 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 :slight_smile:
mas ainda nao tenho a resposta :frowning:

V

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

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+++ :slight_smile:

M

Fala sério!
Esquenta não! Isso acontece com todo mundo, eu acho…
Aquele abraço!!!
San

G

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

V

http://www.hibernate.org/hib_docs/nhibernate/html/queryhql.html
http://www.developer.com/java/ent/article.php/3322131
http://www.devarticles.com/c/a/Java/Hibernate-HQL-in-Depth/1/

Flw! :thumbup:

G

Vlw Juliano grande ajuda cara

B

Experimenta fazer antes dessa linha:
empresa=empresa.toLowerCase();
e não altere em "where lower(e.nome)…

Veja se isso dá certo pra você

Criado 19 de junho de 2008
Ultima resposta 13 de set. de 2012
Respostas 16
Participantes 7