Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

retorno do método buscarPorParametros();

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()));

    }
1 resposta
solução!

Oi Vanderson,

No video da aula eu fiz besteira no codigo e esqueci de concatenar a String JPQL dentro dos ifs, igual voce fez no seu codigo:

jpql = "AND p.nome= :nome";

Mas o correto deveria ser:

jpql += "AND p.nome= :nome";

Altere no seu codigo entao para sempre concatenar com +=, e cuidado para deixar um espaco em branco ao final de cada String, se nao ele vai concatenar tudo "grudado" na querie final do jpql.