JPQL
Consultar el modelo de objetos y saber cuándo la cadena de texto ya no basta.
JPQL y Criteria API
entityManager.find() cubre una sola necesidad: recuperar una entidad cuyo identificador se conoce. Todo lo demás (buscar, filtrar, ordenar, agregar, unir) pasa por una consulta. JPA ofrece dos formas de hacerlo, y elegir entre ellas no es cuestión de gustos.
JPQL es un lenguaje textual que se parece a SQL pero no lo es. La diferencia es fundamental y se resume en una sola frase: JPQL consulta el modelo de objetos, no el esquema. Usted escribe select l from Livre l where l.auteur.nom = :nom, y es Hibernate quien decide que hace falta un join sobre auteur, con qué alias y en qué dialecto. Si renombra una columna en el mapeo, la consulta sigue siendo válida, porque nunca habló de columnas.
La contrapartida es que una consulta JPQL es una cadena de texto: el compilador no la revisa. Una errata en el nombre de un atributo solo aparece en tiempo de ejecución —y, si la consulta tiene nombre, al arrancar la aplicación, lo cual ya es mejor—. La Criteria API responde exactamente a este problema: construye la consulta mediante llamadas a métodos, verificadas en tiempo de compilación.
Comentarios
Los comentarios funcionan con GitHub Discussions
Inicia sesión con GitHub para participar en la discusión