Jakarta Persistence Query Language
OSCross-platform
Websiteeclipse-ee4j.github.io/jakartaee-tutorial/#the-jakarta-persistence-query-language
Influenced by
SQL, Hibernate

The Jakarta Persistence Query Language (JPQL; formerly Java Persistence Query Language) is a platform-independent object-oriented query language[1]: 284, §12  defined as part of the Jakarta Persistence (JPA; formerly Java Persistence API) specification.

JPQL is used to make queries against entities stored in a relational database. It is heavily inspired by SQL, and its queries resemble SQL queries in syntax,[1]: 17, §1.3  but operate against JPA entity objects rather than directly with database tables.[1]: 26, §2.2.3 

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

Examples

edit

Example JPA Classes, getters and setters omitted for simplicity.

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

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

Hibernate Query Language

edit

JPQL is based on the Hibernate Query Language (HQL), an earlier non-standard query language included in the Hibernate object-relational mapping library.

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

Citations

edit

References

edit
  • Bauer, Christian; King, Gavin; Gregory, Gary (2016), Java Persistence with Hibernate (Second ed.), Manning Publications, ISBN 978-1617290459

See also

edit
edit

📚 Artikel Terkait di Wikipedia

Jakarta Persistence

for Jakarta EE 8 and below) The Jakarta Persistence Query Language (JPQL; formerly Java Persistence Query Language) Object/relational metadata The final

SQL

implemented in Java as an internal domain-specific language Java Persistence Query Language (JPQL): The query language used by the Java Persistence API and Hibernate

Query language

processing and query language most commonly used for JSON query processing. JPQL is a query language defined as part of Jakarta Persistence (used in Java applications

Hibernate (framework)

industry-standard Jakarta Persistence (formerly Java Persistence API) and Jakarta Data specifications. The mapping of Java classes to database tables

Data access object

to most programming languages, most software with persistence needs, and most databases, it is traditionally associated with Java EE applications and

Java Database Connectivity

Java Database Connectivity (JDBC) is an application programming interface (API) for the Java programming language which defines how a client may access

Persistence (computer science)

Persistent identifier Persistent memory Copy-on-write CRUD Java Data Objects Java Persistence API System prevalence Orthogonality Service Data Object Snapshot

Jakarta EE

formerly Java Platform, Enterprise Edition (Java EE) and Java 2 Platform, Enterprise Edition (J2EE), is a set of specifications, extending Java SE with