Jakarta Persistence Query Language - Jakarta Persistence Query Language

Jakarta Persistence Query Language
SO Plataforma cruzada
Local na rede Internet eclipse-ee4j .github .io / jakartaee-tutorial / persistence-querylanguage .html,% 20https: // eclipse-ee4j .github .io / jakartaee-tutorial / # the-jakarta-persistence-query-language
Influenciado por
SQL , Hibernate

A Jakarta Persistence Query Language ( JPQL ; anteriormente Java Persistence Query Language) é uma linguagem de consulta orientada a objetos independente de plataforma definida como parte da especificação Jakarta Persistence (JPA; anteriormente Java Persistence API).

JPQL é usado para fazer consultas em entidades armazenadas em um banco de dados relacional. Ele é fortemente inspirado em SQL e suas consultas se assemelham a consultas SQL na sintaxe, mas operam em objetos de entidade JPA em vez de diretamente em tabelas de banco de dados.

Além de recuperar objetos ( SELECTconsultas), o JPQL oferece suporte a consultas UPDATEe conjuntos baseados DELETE.

Exemplos

Classes, getters e setters de JPA omitidos para simplificar.

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

Então, uma consulta simples para recuperar a lista de todos os autores, ordenados alfabeticamente, seria:

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

Para recuperar a lista de autores que já foram publicados pela XYZ Press:

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

JPQL oferece suporte a parâmetros nomeados, que começam com dois pontos ( :). Poderíamos escrever uma função retornando uma lista de autores com o sobrenome fornecido da seguinte maneira:

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

Linguagem de consulta do Hibernate

JPQL é baseado no Hibernate Query Language (HQL), uma linguagem de consulta não padrão anterior incluída na biblioteca de mapeamento objeto-relacional do Hibernate .

O Hibernate e o HQL foram criados antes da especificação JPA. A partir do Hibernate 3, JPQL é um subconjunto do HQL.

Veja também

links externos