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.
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.
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.
Oi!
Sim, no vídeo ficou errado mesmo. Era para concatenar, mas a String acabou sendo sobrescrita dentro do if.
Bons estudos!