Jakarta Persistence Query Language

Jakarta Persistence Query Language (JPQL. Раніше, Java Persistence Query Language) — це платформо-незалежна об'єктно-орієнтована мова запитів, що є частиною специфікації Java Persistence API (JPA).

JPQL використовується для написання запитів до сутностей, що зберігаються в реляційній базі даних. Вона значною мірою схожа на SQL, і її запити нагадують запити SQL за синтаксисом, але працюють на об'єктах сутностей JPA (JPA entity objects), а не на таблицях бази даних. 

В додаток до вибирання об'єктів (запити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 a.lastName IS NULL OR LOWER(a.lastName) = LOWER(:lastName)";     Query query = getEntityManager().createQuery(queryString);          query.setParameter("lastName", lastName);     return query.getResultList(); } 

Hibernate Query Language

[ред. | ред. код]

JPQL базується на Hibernate Query Language (HQL), старшій, не стандартизованій мові запитів, що включена до бібліотеку об'єктно-реляційного відображення  Hibernate.

Hibernate та HQL були створенні до появи специфікації JPA. Так само як Hibernate 3, JPQL є підмножиною мови запитів HQL.

Див. також

[ред. | ред. код]