stringtranslate.com

Lenguaje de consulta persistente de Jakarta

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 ( SELECTconsultas), JPQL admite consultas basadas en UPDATEconjuntos DELETE.

Ejemplos

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 ( ) ; }        

Lenguaje de consulta de Hibernate

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.

Citas

  1. ^ abc Bauer, Rey y Gregory 2016.

Referencias

Véase también

Enlaces externos