Prezado professor Rodrigo Ferreira,
No método buscarPorParemetros() que é proposto a busca de Produto por parâmetros opcionais, dentro dos IFs o valor da variável "jpql" está sendo substituído com os ANDs deixando a query errada. Vou deixar a sugestão da correção caso alguém precise.
```public List<Produto> buscarPorParemetros(String nome, BigDecimal preco, LocalDate dataCadastro) {
String jpql = " SELECT p FROM Produto p WHERE 1=1 ";
if (nome != null && !nome.trim().isEmpty()) {
jpql = jpql.concat(" AND p.nome = :nome ");
}
if (preco != null) {
jpql = jpql.concat(" AND p.preco = :preco ");
}
if (dataCadastro != null) {
jpql = jpql.concat(" AND p.dataCadastro = :dataCadastro ");
}
System.out.println(jpql);
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("dataCadastro", dataCadastro);
}
return query.getResultList();
}```
Atenciosamente.