// Fala galera, estou com problema nesse código, ele não está respeitando o a regra de pesquisa por id. Poderiam me ajudar, desde já agradeço.
packagebr.com.wdbo.syshelpdesk.banco;importbr.com.wdbo.syshelpdesk.modelo.Empresa;importjava.util.List;importjavax.persistence.Query;publicclassEmpresaDAOextendsDAO<Empresa>{publicEmpresaDAO(){super(Empresa.class);}publicList<Empresa>findByFiltro(Longid,Stringempresa){List<Empresa>listaEmpresa=null;Stringsql=("from Empresa e where "+"( :Id is not null and e.id = :Id ) "+" or (:Empresa is not null and e.empresa like :Empresa)");this.em=JPAUtil.getEntityManager();em.getTransaction().begin();Queryquery=em.createQuery(sql);query.setParameter("Id",id);query.setParameter("Empresa",empresa+"%");listaEmpresa=query.getResultList();em.getTransaction().commit();em.close();returnlistaEmpresa;}
packagebr.com.wdbo.syshelpdesk.banco;importbr.com.wdbo.syshelpdesk.modelo.Empresa;importjava.util.List;importjavax.persistence.Query;publicclassEmpresaDAOextendsDAO<Empresa>{publicEmpresaDAO(){super(Empresa.class);}publicList<Empresa>findByFiltro(Longid,Stringempresa){StringBuilderhql=newStringBuilder();hql.append("FROM Empresa e ");hql.append("WHERE e.id = :id OR e.empresa LIKE :empresa");this.em=JPAUtil.getEntityManager();Queryquery=em.createQuery(sql);query.setParameter("id",id);query.setParameter("empresa",empresa+"%");List<Empresa>listaEmpresa=query.getResultList();em.close();returnlistaEmpresa;}}
publicList<Empresa>findByFiltro(Longid,Stringempresa){
StringBuilderhql=newStringBuilder();hql.append("FROM Empresa e ");hql.append("WHERE e.id = :id OR e.empresa LIKE :empresa");this.em=JPAUtil.getEntityManager();Queryquery=em.createQuery(sql); // Mas Fica dando erro nesta linha, pois estamos chamando 'sql' que não existe.query.setParameter("id",id);query.setParameter("empresa",empresa+"%");List<Empresa>listaEmpresa=query.getResultList();em.close();returnlistaEmpresa;
}
}
Lucas_Camara
kkk foi mal, eh que alterei no notepad++. Mude essa linha para:
Amigo não funcionou … Tirei um print da minha front-end.
Ele continua não respeitando quando pesquiso só pelo o código. O mesmo esta trazendo as empresas cadastradas no banco.
Atenciosamente.
Solucao aceita
Lucas_Camara1 like
Assim deve ir:
packagebr.com.wdbo.syshelpdesk.banco;importbr.com.wdbo.syshelpdesk.modelo.Empresa;importjava.util.List;importjavax.persistence.Query;publicclassEmpresaDAOextendsDAO<Empresa>{publicEmpresaDAO(){super(Empresa.class);}publicList<Empresa>findByFiltro(Longid,Stringempresa){StringBuilderhql=newStringBuilder();hql.append("FROM Empresa e ");hql.append("WHERE 1 = 1 ");if(id!=null){hql.append("AND e.id = :id ");}if(empresa!=null&&!"".equals(empresa)){hql.append("AND e.empresa LIKE :empresa ");}this.em=JPAUtil.getEntityManager();Queryquery=em.createQuery(sql);if(id!=null){query.setParameter("id",id);}if(empresa!=null&&!"".equals(empresa)){query.setParameter("empresa",empresa+"%");}List<Empresa>listaEmpresa=query.getResultList();em.close();returnlistaEmpresa;}}
M
Matheusrfjava1 like
Erro na sua sql, pois a consulta irá trazer o registro onde seu id for igual ao parâmetro e também onde a descrição for igual ao parâmetro passado.
No caso da sua print. Você esta buscando empresas que tenha o código 1 e as empresas onde a descrição começa com “%”. Ou seja irá trazes todas as empresas.
Uma solução seria criar duas funções distintas findById(Integer id) e findLikeDescricao(String descricao). E uma função que conteria uma definida lógica de negócio. Exemplo se id diferente de nulo pesquisa por id senão por descrição.
Besteti
Amigo Muito Obrigado pela ajuda. Está de Parabéns !!!
L
Logusmao
Uma outra forma, seria
String sql = ("select e from Empresa e where e.id = :Id UNION select em from Empresa em where em.empresa like :Empresa ")
Como você está utilizando a mesma entidade, o hibernate suporta o UNION
Não esqueça de
query.setParameter("Empresa", "'" + empresa + "%'");