Java Persistence Query Language
Java Persistence Query Language (JPQL) es un lenguaje de consulta orientado a objetos independiente de la plataforma definido como parte de la especificación J…
| 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 un lenguaje de consultas que se basa en comandos SQL pero con una variación ya que se usa la caché de la persistencia 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 y también notar que hemos hecho trampa si intentamos copiar esta parte de aquí mismo 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 Autor {
@Id
private Integer id;
private String nombre;
private String apellidos;
@ManyToMany
private List<Libro> libros;
}
@Entity
public class Libro {
@Id
private Integer id;
private String titulo;
private String isbn;
@ManyToOne
private Editorial editorial;
@ManyToMany
private List<Autor> autores;
}
@Entity
public class Editorial {
@Id
private Integer id;
private String nombre;
private String direccion;
@OneToMany(mappedBy = "editorial")
private List<Libro> libros;
}
Dadas esas clases, una consulta simple para obtener la lista de todos los autores, ordenados alfabéticamente, sería:
SELECT a FROM Autor a ORDER BY a.nombre, a.apellidos
Para recuperar la lista de autores que han sido publicados alguna vez por XYZ Press:
SELECT DISTINCT a FROM Autor a INNER JOIN a.libros b WHERE b.editorial.nombre = '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<Autor> getAutoresPorApellidos(String apellidos) {
String queryString = "SELECT a FROM Autor a " +
"WHERE :apellidos IS NULL OR LOWER(a.apellidos) = :apellidos";
Query query = getEntityManager().createQuery(queryString);
query.setParameter("apellidos", StringUtils.lowerCase(apellidos));
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
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.