- Java Persistence Query Language
-
Java Persistence Query Language Испытал влияние: Java Persistence Query Language (JPQL) — платформо-независимый объектно-ориентированный язык запросов являющийся частью Java Persistence API спецификации.
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; import org.apache.commons.lang.StringUtils; ... @SuppressWarnings("unchecked") public List<Author> 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 основан на Hibernate Query Language (HQL), более раннем не стандартизованном языке запросов, включённом в библиотеку объектно-реляционного отображения Hibernate.
Hibernate и HQL были созданы до появления спецификации JPA. JPQL является подмножеством языка запросов HQL.
См. также
Ссылки
- Full Query Language Syntax from The Java EE 5 Tutorial (англ.)
- JPA Queries and JPQL — a chapter of the ObjectDB Manual (англ.)
- Type safe Hibernate (HQL) query engine — TorpedoQuery (англ.)
Java Persistence API Cayenne · DataNucleus · EasyBeans · EclipseLink · Hibernate · TopLink · OpenEJB · OpenJPA Категории:- Языки программирования по алфавиту
- Информационные языки
- Java Enterprise Edition
Wikimedia Foundation. 2010.