Articulo de referencia

Lenguaje de consulta de persistencia de Yakarta

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 pla...

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 . lastName

Para 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

  • Sitio web oficialEdita esto en Wikidata
    • Sintaxis completa del lenguaje de consulta del tutorial de Jakarta EE 8.
  • Consultas JPA y JPQL: un capítulo del Manual de ObjectDB
  • Motor de consultas Hibernate (HQL) con tipado seguro - TorpedoQuery