Jakarta Persistence Query Language - Jakarta Persistence Query Language

Jakarta Persistence Query Language
OS Plattformsoberoende
Hemsida eclipse-ee4j .github .io /jakartaee-tutorial /persistence-querylanguage .html,%20https: // eclipse-ee4j .github .io /jakartaee-tutorial / #the-jakarta-persistence-query-language
Påverkad av
SQL , viloläge

Den Jakarta Persistence Query Language ( JPQL ; formerly Java Persistence Query Language) är ett plattformsoberoende objektorienterade frågespråk som definieras som en del av Jakarta Persistence (JPA; formerly Java Persistence API) specifikation.

JPQL används för att göra frågor mot enheter som lagras i en relationsdatabas. Det är starkt inspirerat av SQL , och dess frågor liknar SQL -frågor i syntax, men fungerar mot JPA -objektobjekt snarare än direkt med databastabeller.

Förutom att hämta objekt ( SELECTförfrågningar) stöder JPQL set -based UPDATEoch DELETEfrågor.

Exempel

Exempel JPA Klasser, getters och setters uteslutna för enkelhetens skull.

@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;
}

En enkel fråga för att hämta listan över alla författare, ordnade alfabetiskt, skulle vara:

SELECT a FROM Author a ORDER BY a.firstName, a.lastName

För att hämta listan över författare som någonsin har publicerats av XYZ Press:

SELECT DISTINCT a FROM Author a INNER JOIN a.books b WHERE b.publisher.name = 'XYZ Press'

JPQL stöder namngivna parametrar, som börjar med kolon ( :). Vi kan skriva en funktion som returnerar en lista över författare med det efternamnet som följer på följande sätt:

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();
}

Viloläge för frågespråk

JPQL är baserat på Hibernate Query Language (HQL), ett tidigare icke-standardiserat frågespråk som ingår i Hibernate- objektrelationsmappningsbiblioteket .

Viloläge och HQL skapades före JPA -specifikationen. Från Hibernate 3 är JPQL en delmängd av HQL.

Se även

externa länkar