Abfragesprachen JPA QL und HQL, Unterschiede? Was verwenden mit Hibernate?

DarthShader

Erfahrenes Mitglied
Hallo,

ich habe eine Frage zur Java Persistence API.

Ich habe gerade die Syntax der JPA QL durchgeschaut und würde diese gerne für ein Projekt verwenden, welches als Persistenz-Implementierung Hibernate verwendet.

Nun bin ich gerade am "Erlernen von Hibernate" und stoße auf ein Kapitel, in dem die "Hibernate Query Language", kurz HQL, erläutert wird.

Beide Sprachen sind sehr sehr ähnlich und ich bin verwirrt:
  • In welchem Zusammenhang steht JPA QL mit HQL, wenn es überhaupt einen gibt?
  • Kann ich JPA QL auch mit Hibernate verwenden? Eigentlich müsste es ja so sein, denn JPA QL gehört doch zur Persistence Spezifikation von Java, sodass Hibernate das eigentlich implementieren müsste?
  • Was soll ich verwenden? Ich tendiere zu JPA QL, wenn das mit Hibernate überhaupt möglich ist, da ich damit dann unabhängig von anderen Persistenz-Implementierungen bin

Über Eure Hilfe würde ich mich sehr freuen


Vielen Dank!
 
JPA QL basiert auf dem JPA 1.0 Standard, HQL auf Hibernate. ;) Hibernate stellt mit dem Hibernate EntityManager eine JPA Implementierung zur Verfügung. D.h. du kannst unter verwendung der JPA auch JPA QL mit Hibernate verwenden. Grundsätzlich ist der JPA Standard recht beschränkt (keine Criteria API, kein Sorting API, kein Paging API usw.

Grundsätzlich würde ich auf jeden Fall versuchen zumindest mit den Entityannotationen bei JPA zu bleiben. Du kannst dann trotzdem mit dem Hibernate EntityManager hibernatespezifische API nutzen und bleibst somit nur in deinem DAO Providerspezifisch.

Ich hab zusammen mit Eberhard Wolff eine kleine Library zum implementieren einer DAO Schicht mit Spring und JPA geschrieben, die dir bei solchen Entscheidungen behilflich sein kann: http://trac.synyx.org/hades. JPA Entities und DAOs je nach Wunsch (z.Zt. nur reines JPA und Hibernate, weitere Provider sollen folgen). Schau einfach mal rein.

Gruß
Ollie
 
Hallo Oliver,

vielen Dank für Deine Antwort. Jetzt, nachdem ich das Kapitel über HQL durch habe, werde ich auch HQL verwenden. Meine bisherigen Domain Models bzw. Persistent Entities habe ich auch mit reinen JPA Annotationen versehen, z.B. was die Entity-Beziehungen angehen.

Das von Dir entwickelte Framework schaue ich mir auf jeden Fall einmal an, werde aber sicher die DAOs bzw. den restlichen Code selbst schreiben, allein um diese Erfahrung zu machen.

Danke!
 

Neue Beiträge

Zurück