Java Persistence Query Language

Из Википедии, бесплатной энциклопедии

Java Persistence Query Language
Класс языка язык запросов
Появился в 2009
Испытал влияние SQL
Сайт eclipse-ee4j.github.io/j…

Java Persistence Query Language (JPQL) — платформенно-независимый объектно-ориентированный язык запросов, являющийся частью спецификации Java Persistence API (JPA).

JPQL используется для написания запросов к сущностям, хранящимся в реляционной базе данных. JPQL во многом похож на SQL, но в отличие от последнего, оперирует запросами, составленными по отношению к сущностям JPA, в отличие от прямых запросов к таблицам базы данных.

В дополнение к получению объектов (SELECT-запросы), JPQL поддерживает запросы, основанные на операторах UPDATE и DELETE.

Предположим, имеются JPA-сущности, определённые следующим образом (методы установки и получения значения свойств для простоты опущены):

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

Следующий запрос позволяет получить список авторов, упорядоченных в алфавитном порядке:

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

Запрос для получения списка авторов, когда-либо опубликованных издательством «XYZ Press»:

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

JPQL поддерживает именованные параметры, которые начинаются с двоеточия (:). Функция, возвращающая список авторов с данной фамилией будет выглядеть следующим образом:

import javax.persistence.EntityManager; import javax.persistence.Query;  ...  @SuppressWarnings("unchecked") public List<Author> getAuthorsByLastName(String lastName) {     String queryString = "SELECT a FROM Author a " +                          "WHERE LOWER(a.lastName) = :lastName";     Query query = getEntityManager().createQuery(queryString);          query.setParameter("lastName", lastName.toLowerCase());     return query.getResultList(); } 

Hibernate Query Language

[править | править код]

JPQL основан на Hibernate Query Language (HQL), более раннем не стандартизованном языке запросов, включённом в библиотеку объектно-реляционного отображения Hibernate.

Hibernate и HQL были созданы до появления спецификации JPA. JPQL является подмножеством языка запросов HQL.