Ir al contenido

Java Persistence Query Language

De Wikipedia, la enciclopedia libre

Esta es una versión antigua de esta página, editada a las 20:43 7 jun 2013 por Aliuk (discusión · contribs.). La dirección URL es un enlace permanente a esta versión, que puede ser diferente de la versión actual.

(difs.) ← Revisión anterior · Ver revisión actual (difs.) · Revisión siguiente → (difs.)
Java Persistence Query Language
?
Información general
Apareció en 2009
Influido por SQL
Sistema operativo Multiplataforma

Java Persistence Query Language (JPQL) es un lenguaje de consulta orientado a objetos independiente de la plataforma definido como parte de la especificación Java Persistence API (JPA).

JPQL es usado para hacer consultas contra las entidades almacenadas en una base de datos relacional. Está inspirado en gran medida por SQL, y sus consultas se asemejan a las consultas SQL en la sintaxis, pero opera con objetos entidad de JPA en lugar de hacerlo directamente con las tablas de la base de datos.

Además de recuperar objetos (consultas SELECT), JPQL soporta consultas de actualización (UPDATE) y borrado (DELETE).

Ejemplos

Ejemplo de clases JPA, los getters y setters han sido omitidos por simplicidad.

@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;
}

Dadas esas clases, una consulta simple para obtener la lista de todos los autores, ordenados alfabéticamente, sería:

SELECT a FROM Author a ORDER BY a.firstName, a.lastName

Para recuperar la lista de autores que han sido publicados alguna vez 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 por dos puntos (:). Se podría escribir una función que devuelve una lista de autores con el apellido indicado de la siguiente manera:

import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.apache.commons.lang.StringUtils;

...

@SuppressWarnings("unchecked")
public List<Author> getAuthorsByLastName(String lastName) {
    String queryString = "SELECT a FROM Author a " +
                         "WHERE :lastName IS NULL OR LOWER(a.lastName) = :lastName";
    Query query = getEntityManager().createQuery(queryString);
    
    query.setParameter("lastName", StringUtils.lowerCase(lastName));
    return query.getResultList();
}

Hibernate Query Language

JPQL está basado en Hibernate Query Language (HQL), un lenguaje de consulta anterior no estándar incluido en la biblioteca de mapeo objeto-relacional Hibernate.

Hibernate y HQL se crearon antes de la especificación JPA. Hasta la versión Hibernate 3, JPQL es un subconjunto de HQL.

Véase también

Enlaces externos