Jakarta Persistence Query Language
OS | Cross-plattform |
---|---|
Hemsida | |
Influerad av | |
SQL , Hibernate |
Jakarta Persistence Query Language ( JPQL ; tidigare Java Persistence Query Language) är ett plattformsoberoende objektorienterat frågespråk som definieras som en del av Jakarta Persistence -specifikationen (JPA; tidigare Java Persistence API).
JPQL används för att göra frågor mot enheter lagrade i en relationsdatabas. Den är starkt inspirerad av SQL , och dess frågor liknar SQL-frågor i syntax, men fungerar mot JPA-entitetsobjekt snarare än direkt med databastabeller.
Förutom att hämta objekt ( SELECT-
frågor) stöder JPQL uppsättningsbaserade UPDATE-
och DELETE
-frågor.
Exempel
Exempel på JPA-klasser, getters och setters utelämnade för enkelhets skull.
@Entity public class Författare { @Id privat Heltals- id ; privat sträng förnamn ; privat sträng efternamn ; @ManyToMany privat lista < Bok > böcker ; } @Entity public class Bok { @Id privat Heltals- id ; privat strängtitel ; _ privat sträng isbn ; @ManyToOne privat förlagsutgivare ; _ @ManyToMany privat lista < Författare > författare ; } @Entity public class Utgivare { @Id privat Heltals- id ; privat strängnamn ; _ privat strängadress ; _ @OneToMany ( mapdBy = "publisher" ) privat lista < Bok > böcker ; }
Då skulle en enkel fråga för att hämta listan över alla författare, ordnad alfabetiskt, vara:
VÄLJ en FRÅN författare en BESTÄLLNING AV en . förnamn , a . efternamn
För att hämta listan över författare som någonsin har publicerats av XYZ Press:
VÄLJ DISTINCT a FROM Author a INNER JOIN a . böcker b VAR b . utgivare . namn = 'XYZ Press'
JPQL stöder namngivna parametrar, som börjar med kolon ( :
). Vi skulle kunna skriva en funktion som returnerar en lista över författare med det angivna efternamnet enligt följande:
import javax.persistence.EntityManager ; importera javax.persistence.TypedQuery ; ... offentlig lista < Författare > getAuthorsByLastName ( String efternamn ) { String queryString = "VÄLJ en FRÅN författare a " + "WHERE a.lastName IS NULL OR LOWER(a.lastName) = LOWER(:lastName)" ; TypedQuery < Author > query = getEntityManager (). createQuery ( queryString , Author . class ); fråga . setParameter ( "efternamn" , efternamn ); returförfrågan . _ getResultList (); }
Viloläge frågespråk
JPQL är baserat på Hibernate Query Language (HQL), ett tidigare icke-standardiserat frågespråk som ingår i Hibernate objektrelationell mappningsbibliotek .
Hibernate och HQL skapades före JPA-specifikationen. Från Hibernate 3 är JPQL en delmängd av HQL.
Se även
externa länkar
- Officiell webbplats
- JPA Queries och JPQL - ett kapitel i ObjectDB Manual
- Skriv säker Hibernate (HQL) frågemotor - TorpedoQuery