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.
Див. також Об'єктно-реляційне відображення Hibernate (Java) Java Persistence API ActiveJPA