Interested Article - Java Persistence Query Language
- 2021-03-04
- 1
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 основан на (HQL), более раннем не стандартизованном языке запросов, включённом в библиотеку объектно-реляционного отображения Hibernate .
Hibernate и HQL были созданы до появления спецификации JPA. JPQL является подмножеством языка запросов HQL.
См. также
Ссылки
- (англ.)
- (англ.)
- (англ.)
- 2021-03-04
- 1