El lenguaje de consulta de persistencia Java™ (JPQL) se utiliza para definir búsquedas en entidades persistentes independientemente del mecanismo que se utilice para almacenar esas entidades.
JPQL es por tanto portable y no está restringido a ningún almacén de datos determinado.
JPQL es una ampliación del lenguaje de consulta de Enterprise JavaBeans, EJB QL y está diseñado para combinar la sintaxis y la semántica de consulta simple de SQL con la expresividad de un lenguaje de expresión orientado a objetos.
Las instancias de consulta se crean utilizando los métodos que expone la interfaz EntityManager.
JPQL define dos tipos de consultas: consultas dinámicas que se crean al vuelo y consultas con nombre.
Las consultas con nombre se destinan a utilizarlas en contextos donde la misma consulta se inicia varias veces. Sus beneficios principales incluyen la reutilización mejorada del código, un esfuerzo de mantenimiento menor y un posible mejor rendimiento, porque se evalúan una vez.
Las consultas con nombre se definen mediante la anotación @NamedQuery. El atributo name se utiliza para identificar exclusivamente la consulta con nombre, mientras que el atributo query define la consulta.