6
respostas

Criteria

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?

6 respostas

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!