Jump to content

Язык запросов Jakarta Persistence

Язык запросов Jakarta Persistence
ТЫ Кросс-платформенный
Веб-сайт затмение-ee4j .github .что /jakartaee-учебник / #the-jakarta-persistence-query-language
Под влиянием
SQL , спящий режим

Язык запросов Jakarta Persistence ( JPQL ; ранее Java Persistence Query Language) — это независимый от платформы объектно-ориентированный язык запросов. [1] : 284, §12  определяется как часть спецификации Jakarta Persistence (JPA; ранее Java Persistence API).

JPQL используется для выполнения запросов к объектам, хранящимся в реляционной базе данных. Он во многом основан на SQL , и его запросы по синтаксису напоминают запросы SQL. [1] : 17, §1.3  но работать с объектами сущностей JPA, а не напрямую с таблицами базы данных. [1] : 26, §2.2.3 

Помимо извлечения объектов ( SELECT запросы), JPQL поддерживает наборы на основе UPDATE и DELETE запросы.

Примеры классов JPA, геттеры и сеттеры опущены для простоты.

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

Тогда простой запрос для получения списка всех авторов, упорядоченных в алфавитном порядке, будет выглядеть следующим образом:

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

Чтобы получить список авторов, когда-либо опубликованных XYZ Press:

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

JPQL поддерживает именованные параметры, которые начинаются с двоеточия ( :). Мы могли бы написать функцию, возвращающую список авторов с заданной фамилией, следующим образом:

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

Язык запросов Hibernate

[ редактировать ]

JPQL основан на языке запросов Hibernate (HQL), более раннем нестандартном языке запросов, включенном в Hibernate библиотеку объектно-реляционного отображения .

Hibernate и HQL были созданы до спецификации JPA. Начиная с Hibernate 3, JPQL является подмножеством HQL.

  • Бауэр, Кристиан; Кинг, Гэвин; Грегори, Гэри (2016), Сохранение Java в Hibernate (второе изд.), Manning Publications , ISBN  978-1617290459

См. также

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2f8c7f07c8a12baa9544099668866f3e__1718650380
URL1:https://arc.ask3.ru/arc/aa/2f/3e/2f8c7f07c8a12baa9544099668866f3e.html
Заголовок, (Title) документа по адресу, URL1:
Jakarta Persistence Query Language - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)