El lenguaje de consulta de persistencia de Jakarta ( JPQL ; anteriormente Java Persistence Query Language) es un lenguaje de consulta orientado a objetos independiente de la plataforma [1] : 284, §12 definido como parte de la especificación de persistencia de Jakarta (JPA; anteriormente Java Persistence API).
JPQL se utiliza para realizar consultas sobre entidades almacenadas en una base de datos relacional. Está fuertemente inspirado en SQL y sus consultas se parecen a las consultas SQL en sintaxis, [1] : 17, §1.3 pero operan sobre objetos de entidad JPA en lugar de hacerlo directamente sobre tablas de base de datos. [1] : 26, §2.2.3
Además de recuperar objetos ( SELECT
consultas), JPQL admite consultas basadas en UPDATE
conjuntos DELETE
.
Ejemplo de clases JPA, se omiten los captadores y definidores para simplificar.
@Entity public class Author { @Id private Integer id ; private String firstName ; private String lastName ; @ManyToMany private List < Book > books ; } @Entity public class Book { @Id private Integer id ; private String title ; private String isbn ; @ManyToOne private Publisher publisher ; @ManyToMany private List < Author > authors ; } @Entity public class Publisher { @Id private Integer id ; private String name ; private String address ; @OneToMany ( mappedBy = "publisher" ) private List < Book > books ; }
Entonces una consulta simple para recuperar la lista de todos los autores, ordenados alfabéticamente, sería:
SELECCIONAR a DE Autor a ORDENAR POR a . nombre , a . apellido
Para recuperar la lista de autores que alguna vez fueron publicados por XYZ Press:
SELECCIONAR DISTINTO a DE Autor a UNIÓN INTERNA a . libros b DONDE b . editor . nombre = 'XYZ Press'
JPQL admite parámetros con nombre, que comienzan con dos puntos ( :
). Podríamos escribir una función que devuelva una lista de autores con el apellido indicado de la siguiente manera:
importar javax.persistence.EntityManager ; importar javax.persistence.TypedQuery ; ...pública Lista < Autor > getAuthorsByLastName ( String apellido ) { String cadena de consulta = "SELECCIONAR a DE Autor a " + "DONDE a.lastName ES NULO O INFERIOR(a.lastName) = INFERIOR(:apellido)" ; TypedQuery < Autor > consulta = getEntityManager (). createQuery ( queryString , Autor.class ) ; consulta.setParameter ( " apellido " , apellido ) ; return consulta.getResultList ( ) ; }
JPQL se basa en el lenguaje de consulta Hibernate (HQL), un lenguaje de consulta no estándar anterior incluido en la biblioteca de mapeo relacional de objetos Hibernate .
Hibernate y HQL se crearon antes de la especificación JPA. A partir de Hibernate 3, JPQL es un subconjunto de HQL.