Java Persistence Query Language (original) (raw)

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.

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

}

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.