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 asemejan a las consultas SQL en su sintaxis, [ 1 ] : 17, §1.3 pero operan sobre objetos de entidad JPA en lugar de directamente sobre tablas de la base de datos. [ 1 ] : 26, §2.2.3
Además de recuperar objetos ( SELECTconsultas), JPQL admite consultas basadas en UPDATEconjuntos DELETE.
Ejemplos
Ejemplos de clases JPA; los métodos getter y setter se han omitido 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 . firstName , a . lastNamePara obtener la lista de autores que han sido publicados por XYZ Press:
SELECT DISTINCT a FROM Author a INNER JOIN a . books b WHERE b . publisher . name = 'XYZ Press'JPQL admite parámetros con nombre, que comienzan con los dos puntos ( :). Podríamos escribir una función que devuelva una lista de autores con el apellido dado de la siguiente manera:
import javax.persistence.EntityManager ; import javax.persistence.TypedQuery ;...public List < Author > getAuthorsByLastName ( String lastName ) { String queryString = "SELECT a FROM Author a " + "WHERE a.lastName IS NULL OR LOWER(a.lastName) = LOWER(:lastName)" ;TypedQuery < Author > query = getEntityManager (). createQuery ( queryString , Author . class ); query . setParameter ( "lastName" , lastName ); return query . getResultList (); }Lenguaje de consulta de Hibernate
JPQL se basa en el lenguaje de consulta de Hibernate (HQL), un lenguaje de consulta anterior no estándar incluido en la biblioteca de mapeo objeto-relacional de Hibernate .
Hibernate y HQL se crearon antes de la especificación JPA. A partir de Hibernate 3, JPQL es un subconjunto de HQL.
Citas
Referencias
- Bauer, Christian; King, Gavin; Gregory, Gary (2016), Java Persistence with Hibernate (Segunda edición), Manning Publications , ISBN 978-1617290459
Véase también
Enlaces externos
- Lenguajes de consulta
- Lenguajes de modelado de datos
- Plataforma empresarial Java
