Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

A JPA első kiadása nem tartalmazta a Hibernate felhasználói között népszerű Criteria lekérdezést, amely – kisebb változtatásokkal – része lett a JPA 2.0 specifikációnak. A CriteriaQuery nagyon jól használható olyan lekérdezésekhez, amelyeknél paraméterből jön a szűrni kívánt mező, vagy a rendezendő oszlop. Az egyetlen probléma a végrehajtott JPQL/SQL lekérdezése, amely két okból is jól jöhet:

  • kinyerni egy jó és tömör JPQL lekérdezést, amely fedi a Criteria tömörségét
  • hiba keresésénél kiírni a naplóba a végrehajtott JQPL vagy SQL utasítást

Van egy jó és egy rossz hírem: a jó hír az, hogy van erre lehetőség. a rossz hír pedig az, hogy JPA provider függő.

Criteria lekérdezés

Készítsünk egy átlagos Criteria lekérdezést:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Book> q = cb.createQuery(Book.class);
Root<Book> b = q.from(Book.class);
q.select(b).orderBy(cb.desc(b.get("id")));
TypedQuery<Book> findAllBooks = em.createQuery(q);

JPQL/SQL utasítás lekérdezése

A fenti forráskód eredményeképp előáll egy TypedQuery, amelyből kiindulva le tudjuk kérdezni az JPA provider által előállított JPQL vagy SQL utasítást.

EclipseLink esetén lehetőségünk van lekérdezni az SQL utasítást, ha már az adatbázisig eljuttattuk a kérést (különben null eredményt kapunk):

findAllBooks.unwrap(org.eclipse.persistence.jpa.JpaQuery.class).getDatabaseQuery().getSQLString();

Hibernate

Hibernate esetén egy nem kell lekérdeznünk a DatabaseQuery példányt, a getQueryString azonnal visszaadja a kívánt SQL utasítást:

findAllBooks.unwrap(org.hibernate.Query.class).getQueryString()

OpenJPA

OpenJPA esetén is elég a getQueryString, viszont ez nem SQL, hanem JPQL utasítást ad vissza:

findAllBooks.unwrap(org.apache.openjpa.persistence.QueryImpl.class).getQueryString()

Mit hoz a jövő?

Mielőtt belemerülnénk a fenti megoldások használatába, nézzünk körül a JPA 2.1 háza táján, ugyanis a 2.1 már specifikálja a JPQL és az SQL utasítás lekérdezhetőségét a getJPQLString és a getSQLString használatával, amelyet az EclipseLink már többé-kevésbé támogat is.

(forrás: java.dzone.com/articles/how-get-jpqlsql-string)


Page viewed times

      
      
Page viewed times
  • No labels
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))