Java Persistence Query Language: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Синтаксис |
|||
(не показаны 4 промежуточные версии 4 участников) | |||
Строка 20: | Строка 20: | ||
| website = |
| website = |
||
}} |
}} |
||
'''Java Persistence Query Language''' ('''JPQL''') — |
'''Java Persistence Query Language''' ('''JPQL''') — платформенно-независимый [[Объектно-ориентированное программирование|объектно-ориентированный]] [[язык запросов]], являющийся частью спецификации [[Java Persistence API]] (JPA). |
||
JPQL используется для написания запросов к сущностям, хранящимся в реляционной базе данных. JPQL во многом похож на [[SQL]], но в отличие от последнего, оперирует запросами, составленными по отношению к сущностям JPA, в отличие от прямых запросов к таблицам базы данных. |
JPQL используется для написания запросов к сущностям, хранящимся в реляционной базе данных. JPQL во многом похож на [[SQL]], но в отличие от последнего, оперирует запросами, составленными по отношению к сущностям JPA, в отличие от прямых запросов к таблицам базы данных. |
||
Строка 27: | Строка 27: | ||
== Примеры == |
== Примеры == |
||
Предположим, имеются |
Предположим, имеются JPA-сущности, определённые следующим образом (методы установки и получения значения свойств для простоты опущены): |
||
<source lang="java5"> |
<source lang="java5"> |
||
Строка 84: | Строка 84: | ||
import javax.persistence.EntityManager; |
import javax.persistence.EntityManager; |
||
import javax.persistence.Query; |
import javax.persistence.Query; |
||
import org.apache.commons.lang.StringUtils; |
|||
... |
... |
||
Строка 91: | Строка 90: | ||
public List<Author> getAuthorsByLastName(String lastName) { |
public List<Author> getAuthorsByLastName(String lastName) { |
||
String queryString = "SELECT a FROM Author a " + |
String queryString = "SELECT a FROM Author a " + |
||
"WHERE |
"WHERE LOWER(a.lastName) = :lastName"; |
||
Query query = getEntityManager().createQuery(queryString); |
Query query = getEntityManager().createQuery(queryString); |
||
query.setParameter("lastName", |
query.setParameter("lastName", lastName.toLowerCase()); |
||
return query.getResultList(); |
return query.getResultList(); |
||
} |
} |
||
Строка 112: | Строка 111: | ||
== Ссылки == |
== Ссылки == |
||
* [http:// |
* [http://docs.oracle.com/javaee/5/tutorial/doc/bnbuf.html Full Query Language Syntax from The Java EE 5 Tutorial] {{ref-en}} |
||
* [http://www.objectdb.com/java/jpa/query JPA Queries and JPQL — a chapter of the ObjectDB Manual] {{ref-en}} |
* [http://www.objectdb.com/java/jpa/query JPA Queries and JPQL — a chapter of the ObjectDB Manual] {{ref-en}} |
||
* [http://torpedoquery.org Type safe Hibernate (HQL) query engine — TorpedoQuery] {{ref-en}} |
* [http://torpedoquery.org Type safe Hibernate (HQL) query engine — TorpedoQuery] {{ref-en}} |
Текущая версия от 22:28, 2 января 2020
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.