Java Persistence Query Language

A Wikipédiából, a szabad enciklopédiából

A Java Persistence Query Language (JPQL) egy platformfüggetlen objektumorientált lekérdező nyelv amelyet a Java Persistence API specifikál.

A JPQL használatával entitásokat tároló relációs adatbázison végezhetünk műveleteket. Szintaktikáját tekintve nagyon hasonlít az SQL-re, de a lekérdezésekben táblák és attribútumok helyett osztályokra és azok property-jeire hivatkozunk. A JPQL lekérdezések nem közvetlenül az adatbázisnak szólnak, az ORM technika segítségével lesznek belőlük valódi SQL lekérdezések.

Az objektumok lekérdezése mellett (SELECT utasítás), a JPQL támogatja a csoportos UPDATE és DELETE utasításokat is.

Példák[szerkesztés]

Tegyük fel, hogy a következő entitásokat megvalósító osztályaink vannak (a getter és setter metódusokat elhagytuk az egyszerűség kedvéért):

@Entity
public class Szerzo {
    @Id
    private Integer azonosito;
    private String vezetekNev;
    private String keresztNev;
    
    @ManyToMany
    private List<Konyv> konyvek;
}

@Entity
public class Konyv {
    @Id
    private Integer azonosito;
    private String cim;
    private String isbn;
    
    @ManyToOne
    private Kiado kiado;
    
    @ManyToMany
    private List<Szerzo> szerzok;
}

@Entity
public class Kiado {
    @Id
    private Integer id;
    private String nev;
    private String cim;

    @OneToMany(mappedBy = "kiado")
    private List<Konyv> konyvek;
}

Ekkor a következő lekérdezés segítségével kaphatjuk meg az összes szerzőt ábécé sorrendben:

SELECT a FROM Szerzo a ORDER BY a.vezetekNev, a.keresztNev

Azon szerzők listájához akiknek jelent meg művük az XYZ Kiadónál a következő lekérdezést kell végrehajtanunk:

SELECT DISTINCT a FROM Szerzo a INNER JOIN a.konyvek b WHERE b.kiado.nev = 'XYZ Kiado'

A JPQL támogatja a dinamikus paramétereket amelyek kettősponttal kezdődnek (:). Így például írhatunk egy metódust, amely a paraméterként kapott keresztnévvel rendelkező szerzőket kéri le az adatbázisból:

import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.apache.commons.lang.StringUtils;

...

@SuppressWarnings("unchecked")
public List<Author> getAuthorsByLastName(String kerNev) {
    String queryString = "SELECT a FROM Szerzo a " +
                         "WHERE :keresztNevParam IS NULL OR LOWER(a.keresztNev) = :keresztNevParam";
    Query query = getEntityManager().createQuery(queryString);
    
    query.setParameter("keresztNevParam", StringUtils.lowerCase(kerNev));
    return query.getResultList();
}

Hibernate Query Language[szerkesztés]

A JPQL alapja a Hibernate Query Language (HQL), amely egy korábbi nem-szabványos lekérdező nyelv a Hibernate programkönyvtárból.

A Hibernate és a HQL korábbi mint a JPA, az csak egy részhalmazát specifikálja a HQL-nek.

Külső hivatkozások[szerkesztés]