Język zapytań dotyczących trwałości w Dżakarcie — Jakarta Persistence Query Language
OS | Wieloplatformowy |
---|---|
Strona internetowa | eclipse-ee4j |
Wpływem | |
SQL , Hibernacja |
Jakarta Persistence Query Language ( JPQL ; dawniej Java Persistence Query Language) jest niezależny od platformy obiektowego języka zapytań zdefiniowane jako część Dżakarcie Persistence (JPA; dawniej Java Persistence API) Specyfikacja.
JPQL służy do tworzenia zapytań do podmiotów przechowywanych w relacyjnej bazie danych. Jest mocno zainspirowany SQL , a jego zapytania przypominają zapytania SQL w składni, ale działają na obiektach JPA, a nie bezpośrednio na tabelach bazy danych.
Oprócz pobierania obiektów ( SELECT
zapytań), JPQL obsługuje zestawy UPDATE
i DELETE
zapytania.
Przykłady
Przykładowe klasy JPA, gettery i settery pominięte dla uproszczenia.
@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;
}
Wtedy proste zapytanie do pobrania listy wszystkich autorów w kolejności alfabetycznej będzie wyglądać następująco:
SELECT a FROM Author a ORDER BY a.firstName, a.lastName
Aby pobrać listę autorów opublikowanych kiedykolwiek przez XYZ Press:
SELECT DISTINCT a FROM Author a INNER JOIN a.books b WHERE b.publisher.name = 'XYZ Press'
JPQL obsługuje nazwane parametry, które zaczynają się od dwukropka ( :
). Moglibyśmy napisać funkcję zwracającą listę autorów o podanym nazwisku w następujący sposób:
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();
}
Hibernacja języka zapytań
JPQL jest oparty na Hibernate Query Language (HQL), wcześniejszym niestandardowym języku zapytań zawartym w bibliotece mapowania obiektowo-relacyjnego Hibernate .
Hibernate i HQL zostały stworzone przed specyfikacją JPA. Od Hibernate 3 JPQL jest podzbiorem HQL.