Język zapytań dotyczących trwałości w Dżakarcie — Jakarta Persistence Query Language

Język zapytań dotyczących trwałości w Dżakarcie
OS Wieloplatformowy
Strona internetowa eclipse-ee4j .github .io /jakartaee-tutorial /persistence-querylanguage .html,%20https: //eclipse-ee4j .github .io /jakartaee-tutorial / #the-jakarta-persistence-query-language
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 ( SELECTzapytań), JPQL obsługuje zestawy UPDATEi DELETEzapytania.

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.

Zobacz też

Zewnętrzne linki