JPQL
Consultar o modelo de objetos e saber quando a string deixa de ser suficiente.
JPQL e Criteria API
entityManager.find() atende a uma única necessidade: recuperar uma entidade cujo identificador se conhece. Todo o resto — buscar, filtrar, ordenar, agregar, fazer join — passa por uma consulta. A JPA oferece duas formas de escrevê-las, e a escolha entre elas não é uma questão de gosto.
JPQL é uma linguagem textual que se parece com SQL, mas não é SQL. A diferença é fundamental e cabe em uma única frase: JPQL consulta o modelo de objetos, não o schema. Você escreve select l from Livre l where l.auteur.nom = :nom, e é o Hibernate que decide que é preciso um join em auteur, com qual alias, em qual dialeto. Renomeie uma coluna no mapeamento e a consulta continua válida, porque nunca falou de colunas.
A contrapartida é que uma consulta JPQL é uma string: o compilador não a revisa. Um erro de digitação no nome de um atributo só aparece em tempo de execução — e, se a consulta for nomeada, na inicialização da aplicação, o que já é melhor. A Criteria API responde exatamente a esse problema, construindo a consulta por chamadas de método verificadas em tempo de compilação.
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão