JPQL ja SQL lauseet ulos JPA Criteria kyselyistä

Jahas, yksi mielenkiintoinen kysymys mihin on koulutuksissa ja projekteissa törmännyt on, miten JPA Criteria kyselyitä saisi jotenkin paremmin ymmärrettyä/debugattua. Nehän voivat olla aika hirveätä luettavaa ja ymmärrettävää ja vaikeaa hahmottaa miten ne muuttuvat SQL lauseiksi kannassa. Toki voi laittaa show_sql asetuksen päälle mutta muukin näkyvyys auttaisi.

Törmäsin artikkeliin jossa tätä ihmeteltiin. Näyttäisi pähkinänkuoressa siltä että nykyään pitää tehdä joka toteutukselle eri tavalla – no niinpä tietysti! Mutta artikkelin kirjoittaja heitti pallon JPA 2.1 kehittäjille joten tiedä vaikka tähänkin standardoituisi vielä joskus siirrettävä rajapinta esim. Java EE 7 releaseen. Sellaista odotellessa ,tässä on koodia eri toteutuksille:

EclipseLink:

findAllBooks.unwrap(JpaQuery.class).getDatabaseQuery().getJPQLString(); // doesn’t work for CriteriaQuery
findAllBooks.unwrap(JpaQuery.class).getDatabaseQuery().getSQLString();

Hibernate:

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

OpenJPA:

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

Pääideana on siis käyttää CriteriaQueryn (findAllBooks) unwrap-metodia, valitettavasti Query toteutus on erilainen eri toteutuksille, tässä taulukko eroista:

ORM Framework Query implementation How to get the JPQL String How to get the SPQL String
EclipseLink JpaQuery getDatabaseQuery().getJPQLString()* getDatabaseQuery().getSQLString()**
Hibernate Query N/A getQueryString()
OpenJPA QueryImpl getQueryString() N/A

 

Enpä testaillut näitä vielä mutta pistän muistiin vastaisen varalle. Criteria API sopii erityisen hyvin dynaamisiin kyselyihin joiden rakenne elää parametrien perusteella.

Ja tarinan lähde: http://agoncal.wordpress.com/2012/05/24/how-to-get-the-jpqlsql-string-from-a-criteriaquery-in-jpa/

 

Advertisements

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s