Estou com um problema aqui… e as soluções encontradas, inclusive aqui no forum, não estão resolvendo.
Tenho o seguinte método:
public List ListaPaises(String NomePais) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Vestibulando_ManagerPU");
EntityManager em = emf.createEntityManager();
List<Pais> result = null;
try {
result = em.createNamedQuery("Pais.findByNomePais")
.setParameter("nomePais", NomePais)
.getResultList();
} catch (Exception e) {
e.printStackTrace();
}
return (result);
}
Quando envio Brasil na string ele acha perfeitamente. Agora preciso que se eu enviar B ele ache brasil, bolívia, e etc… ou seja um LIKE. Nas soluções que encontrei diz para alterar assim:
.setParameter("nomePais", "%" + NomePais)
ou
.setParameter("nomePais", "%" + NomePais + "%")
Mas em nenhum deles deu certo. Quando faço isto ele não retorna nada, nem uma exception. =/
Alguma ajuda?
Tópicos com mesmo problema que eu mas não resolveu:
Queria fazer com named, se não for possível parto para o createquery, mas não queria ter SQL solto no código.
Ja agradeço pela ajuda mas ainda não esta indo, e o mais engraçado.
seguinte Namedquery: @NamedQuery(name = "Pais.findLikeNomePais", query = "SELECT p FROM Pais p WHERE p.nomePais LIKE :nomePais"),
Seguinte Método: public List ListaPaises(String NomePais) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Vestibulando_ManagerPU");
EntityManager em = emf.createEntityManager();
List<Pais> result = null;
try {
result = em.createNamedQuery("Pais.findLikeNomePais")
.setParameter("nomePais", "%" + NomePais)
.getResultList();
} catch (Exception e) {
e.printStackTrace();
}
return (result);
}
Se envio BRASIL, Brasil, brasSIL, BrASiL, tudo retorna um registro,
mas se envio Bras, B, b, que deveria retornar os dados simplesmente não retorna NADA. =/
Pela lógica se fosse problemas de casesensitive B ou b deveria retornar algo pelo menos, e Brasil e brasil deveria dar resultados diferentes.
O % determina que o sistema deve considerar qualquer valor antes ou depois de valores literais
Tipo:
“Jose da Silva”
%jose - Faz referencia a tudo que contenha jose no fim, e qualquer coisa antes
%jose% - Faz referencia a tudo que contenha jose antes ou depois de qualquer coisa
%jose%silva - Faz referencia a todos os joses, com outros sobrenomes no meio do nome, terminando com silva
Agora que me toquei que estava fazendo o like errado. kkk
no lugar de .setParameter("nomePais", "%" + NomePais)
usar .setParameter("nomePais", NomePais + "%")
desculpe pelas mancadas, mas eh tanto trem dando errado que eu já desespero antes de pensar. kkkk
Muito obrigado ai gente. Marcando como resolvido.
Um tópico importante aqui para quem tambem apresentar o problema é alem de trocar o modo de passar o parametro é importar REMONTAR A NAMEDEQUERY lá na classe de modelo.