Limba interogării de persistență Jakarta - Jakarta Persistence Query Language

Limbaj de interogare de persistență Jakarta
OS Cross-platform
Site-ul web eclipse-ee4j .github .io / jakartaee-tutorial / persistence- querylanguage .html,% 20https: // eclipse-ee4j .github .io / jakartaee-tutorial / # the-jakarta-persistence-query-language
Influențată de
SQL , Hibernare

Jakarta Persistența Query Language ( JPQL , fostă Java Persistence Query Language) este o platformă independentă orientată spre obiect limbaj de interogare definit ca parte a Jakarta stăruinței (APP, fostă Java Persistence API) caietul de sarcini.

JPQL este utilizat pentru a face interogări împotriva entităților stocate într-o bază de date relațională. Este puternic inspirat de SQL , iar interogările sale seamănă cu interogările SQL în sintaxă, dar funcționează împotriva obiectelor entității JPA, mai degrabă decât direct cu tabelele bazei de date.

Pe lângă recuperarea obiectelor ( SELECTinterogări), JPQL acceptă seturi UPDATEși DELETEinterogări.

Exemple

Exemplu de clase JPA, getters și setere omise pentru simplitate.

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

Apoi, o interogare simplă pentru a recupera lista tuturor autorilor, ordonată alfabetic, ar fi:

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

Pentru a recupera lista autorilor care au fost publicate vreodată de XYZ Press:

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

JPQL acceptă parametrii numiți, care încep cu colon ( :). Am putea scrie o funcție returnând o listă de autori cu numele de familie dat după cum urmează:

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

Limbajul hibernării interogării

JPQL se bazează pe limbajul de interogare Hibernate (HQL), un limbaj de interogare anterioară non-standard inclus în biblioteca de mapare obiect-relațională Hibernate .

Hibernate și HQL au fost create înainte de specificația JPA. Începând cu Hibernate 3, JPQL este un subset al HQL.

Vezi si

linkuri externe