Язык запросов Jakarta Persistence
Эта статья включает список литературы , связанную литературу или внешние ссылки , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( июнь 2010 г. ) |
ТЫ | Кросс-платформенный |
---|---|
Веб-сайт | затмение-ee4j |
Под влиянием | |
SQL , спящий режим |
Язык запросов Jakarta Persistence ( JPQL ; ранее Java Persistence Query Language) — это независимый от платформы объектно-ориентированный язык запросов. [1] : 284, §12 определяется как часть спецификации Jakarta Persistence (JPA; ранее Java Persistence API).
JPQL используется для выполнения запросов к объектам, хранящимся в реляционной базе данных. Он во многом основан на SQL , и его запросы по синтаксису напоминают запросы SQL. [1] : 17, §1.3 но работать с объектами сущностей JPA, а не напрямую с таблицами базы данных. [1] : 26, §2.2.3
Помимо извлечения объектов ( 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.TypedQuery;
...
public List<Author> getAuthorsByLastName(String lastName) {
String queryString = "SELECT a FROM Author a " +
"WHERE a.lastName IS NULL OR LOWER(a.lastName) = LOWER(:lastName)";
TypedQuery<Author> query = getEntityManager().createQuery(queryString, Author.class);
query.setParameter("lastName", lastName);
return query.getResultList();
}
Язык запросов Hibernate
[ редактировать ]JPQL основан на языке запросов Hibernate (HQL), более раннем нестандартном языке запросов, включенном в Hibernate библиотеку объектно-реляционного отображения .
Hibernate и HQL были созданы до спецификации JPA. Начиная с Hibernate 3, JPQL является подмножеством HQL.
Цитаты
[ редактировать ]Ссылки
[ редактировать ]- Бауэр, Кристиан; Кинг, Гэвин; Грегори, Гэри (2016), Сохранение Java в Hibernate (второе изд.), Manning Publications , ISBN 978-1617290459