Problema com consulta

Bem, criei um autocomplete, funcionou perfeitamente, não tenho nenhum problema com ele, exceto o que passo para o método posterior, para a consulta, que é executada através do que obtenho no autocomplete:

Para ser claro, quando busco uma parte do nome, como por exemplo “DROGARIA” tenho uma listagem com todas as drogarias, mas quando tento uma busca com um valor acima de 50 caracteres, não traz nada, por alguma razão, alguém pode me explicar isso e como resolver?

Sendo assim, o código abaixo:

Este e o autocomplete:

<div id="campos">
					<p:autoComplete value="#{empresaBean.empresa.nome}" var="empresa"
						completeMethod="#{empresaBean.autocompleteEmpresa}"
						itemLabel="#{empresa.nome}" itemValue="#{empresa.nome}"
						converter="Converter"
						onkeyup="this.value = this.value.toUpperCase();" maxResults="5" >
					</p:autoComplete>
				</div>

Este abaixo é uma parte da página que utilizo para passar uma pesquisa por nome, através do autocomplete:

				<div id="botaopesq">
					<p:commandLink actionListener="#{empresaBean.buscarPorNome}"
						title="Pesquisar" value="#{empresa.nome}"
						action="pesquisa">
						<h:graphicImage library="images" name="botao.png" width="118"
							height="27" style="border:0" />
						<f:setPropertyActionListener target="#{empresaBean.empresa}"
							value="#{empresa}" />
					</p:commandLink>

Este é o método que uso para obter uma lista a partir de um nome, com um like, através do conteúdo do <p:autcomplete>

	@SuppressWarnings("unchecked")
	public List&lt;Empresa&gt; buscarPorNome(String nome) {
		Query query = this.session.createQuery("SELECT e FROM Empresa e WHERE e.nome LIKE'%" + nome + "%'");
		return query.list();
	}

Este é o converter que uso para o <p:autocomplete>

package com.portal.view;

import java.lang.reflect.Field;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.persistence.Id;

@FacesConverter(value = &quot;Converter&quot;)
public class EntityConverter implements Converter {

	public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
		System.out.println(&quot;ECV-GO&quot;);
		return value;
	}

	public String getAsString(FacesContext ctx, UIComponent component, Object obj) {
		System.out.println(&quot;ECV-GS&quot;);
		if (obj != null && !&quot;&quot;.equals(obj)) {
			String id;
			try {
				id = this.getId(getClazz(ctx, component), obj);
				if (id == null) {
					id = &quot;&quot;;
				}
				id = id.trim();
				component.getAttributes().put(id, getClazz(ctx, component).cast(obj));
				return id;
			} catch (SecurityException e) {
				e.printStackTrace(); // seu log aqui
			} catch (IllegalArgumentException e) {
				e.printStackTrace(); // seu log aqui
			} catch (NoSuchFieldException e) {
				e.printStackTrace(); // seu log aqui
			} catch (IllegalAccessException e) {
				e.printStackTrace(); // seu log aqui
			}
		}
		return null;
	}

	private Class&lt;?&gt; getClazz(FacesContext facesContext, UIComponent component) {
		return component.getValueExpression(&quot;value&quot;).getType(facesContext.getELContext());
	}

	public String getId(Class&lt;?&gt; clazz, Object obj) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
		for (Field field : clazz.getDeclaredFields()) {
			if ((field.getAnnotation(Id.class)) != null) {
				Field privateField = clazz.getDeclaredField(field.getName());
				privateField.setAccessible(true);
				if (privateField.get(clazz.cast(obj)) != null) {
					return (String) field.getType().cast(privateField.get(clazz.cast(obj))).toString();
				} else {
					return null;
				}
			}
		}
		return null;
	}
}

pelo que voce postou não vi erro algum, ta tudo certinho… o seu problema deve estar em outro lugar…

Onde sugere mais estar, possivelmente?
Te ajudaria a me ajudar a descobrir, caso pudesse passar mais código?

faz um teste dessa query que vc fez no proprio banco e tenta buscar algo com mais de 50 caracters, as vezes ele nao ta te retornando nada mesmo…

SELECT * FROM Empresa WHERE nome LIKE ‘%nome%’;

e me diz se retorna normal…

Deu pau essa consulta:
colocando DRO, dá certo, mas isso abaixo , não.
SELECT * FROM Empresa WHERE nome LIKE ‘%‘DROGARIA REAL MEDICAMENTOS DROGARIAS EM LUZIÂNIA’%’;

SELECT * FROM Empresa WHERE nome LIKE ‘%DROGARIA REAL MEDICAMENTOS DROGARIAS EM LUZIÂNIA%’;

tenta assim… voce colocou abriu e fechou os % com ’ assim nao iria conseguir mesmo…

que BD vc usa?

Parece um problema com o Mysql, consigo buscar:
SELECT * FROM Empresa WHERE nome LIKE ‘%DROGARIA PRÓ SAÚDE %’;
mas não consigo buscar
SELECT * FROM Empresa WHERE nome LIKE ‘%DROGARIA PRÓ SAÚDE PERFUMARIAS %’;
por exemplo tem um bug.

deve ter uma limitação do like no mysql… então voce vai ter que ajustar seu codigo para nao deixa ninguem digitar mais que 50 caracter… perguntei a um senior aqui no trabalho e ele me disse que deve estorar a consulta… mais nao faz sentido vc busca um nome todo com o autocomplete… voce so deve procurar um trecho da palavra… em fim tem que olhar na documentação do like do mysql para ser mais certeza…

http://dev.mysql.com/doc/refman/4.1/pt/fulltext-search.html

da uma olhada nisso e ve se resolve seu problema… se resolver posta a solução por gentileza =)

Uso o mysql.
0 row(s) returned

Clientes são doidos, sei disso…
infelizmente precisava do bendito nome completo no mysql, e +++ o problema está no seguinte: descobri que o LIKE traz tudo o que parece, mas tem um único detalhe:
se tiver espaço no cadastro do registro, dá pau e não retorna nada.

então seu problema é a query… você vai quer que montar uma melhor para atender a sua necessidade
fica fazendo query direto no banco ate achar o ideal e depois joga no java =)

Preciso apenas tirar os espaços do final, creio.