Mas a diferença do like pro ilike não é simplesmente o case-sensitive???
[quote=faelcavalcanti]mas falando do seu problema, eu geralmente utilizo parametros nomeados, ou seja, utilizando por exemplo:
Não entendi
Editado: Obrigado pela força e pela atenção
L
lucascaton
Alguém?
L
lucascaton
Galera,
Como eu não conseguia resolver meu problema, comecei a analizar o código-fonte do Hibernate. Encontrei na classe LikeExpression o seguinte método:
publicStringtoSqlString(Criteriacriteria,CriteriaQuerycriteriaQuery)throwsHibernateException{Dialectdialect=criteriaQuery.getFactory().getDialect();String[]columns=criteriaQuery.getColumnsUsingProjection(criteria,propertyName);if(columns.length!=1){thrownewHibernateException("Like may only be used with single-column properties");}Stringlhs=ignoreCase?dialect.getLowercaseFunction()+'('+columns[0]+')':columns[0];returnlhs+" like ?"+(escapeChar==null?"":" escape \'"+escapeChar+"\'");}
Reparem que na linha 12, ele - de fato - inclui a string " like ?".
Alguém pode me ajudar?
Obrigado desde já.
L
lucascaton
Galera, problema resolvido.
Notei que a consulta está sendo realizada corretamente, a única coisa que está errada é a SQL que ele “diz que cria”. Ou seja, ele mostra que está executando “select * from tabela where ?”, onde na verdade está realizando “select * from tabela where campo=‘parametro’”.
Estranho, não?! Bom, acredito que o Hibernate tenha algum motivo pra não poder/conseguir exibir a SQL correta, mas pelo menos realizara corretamente a consulta.
L
lucascaton
Bom, pra fechar esse post:
Ontem foi esclarecido por um amigo (Thiago Aléssio), que o Hibernate faz isso pra demonstrar que evitará SQL Injection. Ou seja, onde tem o ? entrará o parametro passado, do qual o Hibernate cuidará pra que não haja SQL Injection, facilitando a vida do programador.