No exercício "Consultas com parâmetros dinâmicos", por que não colocar a setParameter nos primeiros IF? ex.:
String jpql = "SELECT c FROM Cliente c WHERE ";
TypedQuery<Cliente> query = em.createQuery(jpql, Cliente.class);
if (nome != null && !nome.trim().isEmpty()) {
jpql += "AND c.nome = :nome ";
query.setParameter("nome", nome);
}
if (dataNascimento != null) {
jpql += " AND c.dataNascimento = :dataNascimento ";
query.setParameter("dataNascimento", dataNascimento);
}
return query.getResultList();
}