Quando no primeiro IF você passa o valor de filtros, e no segundo if você faz o mesmo, você não deveria apagar o que foi passado no anterior e colocar apenas o do segundo if? Por que que iso não acontece, e o código dá certo?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Quando no primeiro IF você passa o valor de filtros, e no segundo if você faz o mesmo, você não deveria apagar o que foi passado no anterior e colocar apenas o do segundo if? Por que que iso não acontece, e o código dá certo?
Oi João,
Você quer dizer na parte de montar a String jpql?
Tem um errinho no vídeo quanto a isso. Ficou faltando reatribuir a variavel jpql dentro de cada if:
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 ";
}
O correto seria:
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 ";
}
E por que mesmo assim funcionou?
No vídeo com a versão em JPQL eu somente implementei o método completo, mas não cheguei a testar na classe com o método main. Se não teria dado erro na querie mesmo.
O teste foi feito apenas no vídeo seguinte, com o método novo utilizando Criteria, que está certinho.
Então eu não entendi como no Criteria funciona, pois a variável filtros não está sendo reatribuida
Na versão com criteria não é feita reatribuição da variável filtros, pois ela não é mais uma String e sim um objeto que é passado como parâmetro para o método builder.and().
Entendi, obrigado Professor!