Java Persistence Query Language
Encyclopedia
The Java Persistence Query Language (JPQL) is a platform-independent object-oriented query language
Query language
Query languages are computer languages used to make queries into databases and information systems.Broadly, query languages can be classified according to whether they are database query languages or information retrieval query languages...

 defined as part of the Java Persistence API
Java Persistence API
The Java Persistence API, sometimes referred to as JPA, is a Java programming language framework managing relational data in applications using Java Platform, Standard Edition and Java Platform, Enterprise Edition....

 specification.

JPQL is used to make queries against entities stored in a relational database. It is heavily inspired by SQL
SQL
SQL is a programming language designed for managing data in relational database management systems ....

, and its queries resemble SQL queries in syntax, but operate against JPA entity objects rather than directly with database tables.

In addition to retrieving objects (SELECT queries), JPQL supports set based UPDATE and DELETE queries.

Examples

Suppose we have JPA entity classes defined like this (getter and setter methods omitted for simplicity):


@Entity
public class Author {
@Id
private Integer id;
private String firstName;
private String lastName;

@ManyToMany
private List books;
}

@Entity
public class Book {
@Id
private Integer id;
private String title;
private String isbn;

@ManyToOne
private Publisher publisher;

@ManyToMany
private List authors;
}

@Entity
public class Publisher {
@Id
private Integer id;
private String name;
private String address;

@OneToMany(mappedBy = "publisher")
private List books;
}


Then a simple query to retrieve the list of all authors, ordered alphabetically, would be:


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


To retrieve the list of authors that have ever been published by XYZ Press:


SELECT DISTINCT a FROM Author a INNER JOIN a.books b WHERE b.publisher.name = 'XYZ Press'


JPQL supports named parameters, which begin with the colon (:). We could write a function returning a list of authors with the given last name as follows:


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

...

@SuppressWarnings("unchecked")
public List 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 is based on the Hibernate Query Language (HQL), an earlier non-standard query language included in the Hibernate
Hibernate (Java)
Hibernate is an object-relational mapping library for the Java language, providing a framework for mapping an object-oriented domain model to a traditional relational database...

 object-relational mapping
Object-relational mapping
Object-relational mapping in computer software is a programming technique for converting data between incompatible type systems in object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language...

library.

Hibernate and the HQL were created before the JPA specification.
As of Hibernate 3 JPQL is a subset of HQL.

External links

The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK