Język zapytań o trwałość w Dżakarcie
system operacyjny | Międzyplatformowe |
---|---|
Strona internetowa | |
Pod wpływem | |
SQL , Hibernate |
Jakarta Persistence Query Language ( JPQL ; dawniej Java Persistence Query Language) to niezależny od platformy zorientowany obiektowo język zapytań , zdefiniowany jako część specyfikacji Jakarta Persistence (JPA; dawniej Java Persistence API).
JPQL służy do wykonywania zapytań do podmiotów przechowywanych w relacyjnej bazie danych. Jest silnie inspirowany SQL , a jego zapytania przypominają zapytania SQL w składni, ale działają raczej na obiektach jednostek JPA niż bezpośrednio na tabelach bazy danych.
Oprócz pobierania obiektów ( zapytania SELECT
), JPQL obsługuje zapytania UPDATE
i DELETE oparte na zestawach.
Przykłady
Przykładowe klasy JPA, gettery i settery pominięte dla uproszczenia.
@Entity klasa publiczna Autor { @Id private Integer id ; prywatny String imię ; prywatny String nazwisko ; @ManyToMany prywatna lista < Książka > książki ; } @Entity public class Book { @Id private Integer id ; prywatny tytuł ciągu ;
prywatny String isbn ; @ManyToOne prywatny wydawca wydawca ; @ManyToMany prywatna lista <autor> autorzy ; _ _ } @Entity public class Wydawca { @Id private Integer id ; prywatna nazwa ciągu ; prywatny adres String ; @OneToMany ( mapowane przez =
"wydawca" ) lista prywatna < Książka > książki ; }
Wtedy proste zapytanie, aby pobrać listę wszystkich autorów, uporządkowaną alfabetycznie, wyglądałoby następująco:
WYBIERZ OD Autora ZAMÓWIENIE PRZEZ a . _ _ imię , a . nazwisko
Aby pobrać listę autorów, którzy kiedykolwiek zostali opublikowani przez XYZ Press:
SELECT DISTINCT a OD autora a INNER JOIN a . książki b GDZIE b . wydawca . nazwa = '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 < Autor > getAuthorsByLastName ( String lastName ) { String queryString = "WYBIERZ OD Autora a " + "GDZIE a.nazwisko JEST NULL LUB NIŻSZE (a.nazwisko) = NIŻSZE (:nazwisko)" ; Wpisane zapytanie < autor > zapytanie = getEntityManager
(). createQuery ( queryString , Author . class ); zapytanie . setParameter ( "nazwisko" , nazwisko ); zapytanie zwrotne . pobierz listę wyników (); }
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 powstały przed specyfikacją JPA. Od Hibernate 3 JPQL jest podzbiorem HQL.