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?
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!