Caro Professor ,
Fui testar o código do método e ele retorna a lista completa dos produtos cadastrados mesmo eu passando um único produto para filtrar. Ou seja, o filtro não está ocorrendo.
segue o código do método( talvez preenchi algo errado nesta parte) :
public List<Produto> buscaPorListaDeParametros(String nome, BigDecimal preco, LocalDate dataCadastro) {
String jpql = "SELECT p FROM Produto p WHERE 1=1";
if( nome != null && nome.trim().isEmpty()) {
jpql = "AND p.nome= :nome";
}
if(preco !=null) {
jpql = "AND p.preco = :preco";
}
if(dataCadastro!= null) {
jpql= "AND p.dataCadastro = :dataCadastro";
}
TypedQuery<Produto> query = em.createQuery(jpql , Produto.class);
if( nome != null && nome.trim().isEmpty()) {
query.setParameter("nome", nome);
}
if(preco !=null) {
query.setParameter("preco", preco);
}
if(dataCadastro!= null) {
query.setParameter("dataCatastro", dataCadastro);
}
return query.getResultList();
}
na classe de teste tenho esta aplicação:
public static void main(String[] args) {
PopularBancoDeDados(); <- COPIEI O MESMO MÉTODO ESTÁTICO UTILIZADO NAS AULAS ANTERIORES( 3 CATEGORIAS , 1 CLIENTE , 3 PRODUTOS)
EntityManager em = JPAUtil.getEntityManager();
ProdutoDao produtoDao = new ProdutoDao(em);
List<Produto> parametros = produtoDao.buscaPorListaDeParametros("PS5", null, null);
parametros.forEach(p->System.out.println(p.getNome()));
}