Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

ifs

No caso ali, fiquei em dúvida, porque ele passa uma parte da String fora dos " ifs" e depois, dentro dos ifs, o jpql recebe uma nova String. Nesse contexto, não entendi porque não sobreescrever a String, mas sim junta ambas.

3 respostas

Olá, Rodrigo!

O código apresentado na aula está utilizando uma técnica comum para construir consultas dinâmicas, onde os parâmetros são opcionais. A ideia é que a consulta base (a string JPQL) seja modificada para incluir condições adicionais baseadas nos parâmetros que são fornecidos.

No início, a string JPQL é inicializada com a consulta base "SELECT p FROM Produto p WHERE 1=1". A condição 1=1 é sempre verdadeira e é usada apenas para facilitar a adição de condições adicionais.

Em seguida, para cada parâmetro que é fornecido (ou seja, não é nulo), uma condição adicional é adicionada à consulta. Isso é feito através da concatenação de strings, o que significa que a string JPQL original não é sobrescrita, mas sim estendida.

Por exemplo, se o parâmetro nome for fornecido, a string " AND p.nome = :nome" é adicionada à consulta. Isso resulta na consulta "SELECT p FROM Produto p WHERE 1=1 AND p.nome = :nome". Se o parâmetro preco também for fornecido, a string " AND p.preco = :preco" é adicionada, resultando na consulta "SELECT p FROM Produto p WHERE 1=1 AND p.nome = :nome AND p.preco = :preco", e assim por diante.

A razão para não sobrescrever a string JPQL, mas sim juntar ambas, é que queremos manter todas as condições que foram adicionadas anteriormente. Se sobrescrevêssemos a string JPQL, perderíamos todas as condições adicionadas anteriormente e ficaríamos apenas com a última.

Espero ter ajudado e bons estudos!

Sim, entendi esses conceitos, mas para mim dentro do if deveria existir jpql += "nanaã...", do jeito q ele colocou, com jqpl = "x" , para mim, parece q vai sobescrever.

solução!

Oi!

Sim, no vídeo ficou errado mesmo. Era para concatenar, mas a String acabou sendo sobrescrita dentro do if.

Bons estudos!