Hibernate Query Language

Die Hibernate Query Language (HQL) ist eine Abfragesprache, die aus dem HiberNate O-R Mapper Projekt entstanden ist und die Objektorientierte Programmierung mit einer relationalen Datenbank verbindet.

Die Hibernate Query Language basiert im Groben auf SQL und erlaubt Entity Relationship-Referenzen in einem objektorientierten Kontext.

Dadurch können explizite SQL Joins vereinfacht oder sogar vermieden werden. Implizite Verknüpfungen zwischen Warehouse-Tabellen und Location-Tabellen sind mit HQL möglich. Die Abfragen können datenbankunabhängig sein.

Der HiberNate O-R Mapper wandelt in diesem Fall die Abfrage in ein auf den entsprechenden Datenbanktyp passendes SQL-Statement um. Die Hibernate Query Language ist objektbasierend. Zu beachten ist die strikte Einhaltung von Groß- und Kleinschreibung.

Hibernate Query Language (HQL) – Aufbau und Funktion

Der Aufbau der Hibernate Query Language ist SQL sehr ähnlich. Mit HQL ist es möglich auf ein Objekt direkt zuzugreifen. Zum Beispiel können alle Instanzen mit HQL der Klasse „FIRMA“ ausgegeben werden. In diesem Fall lautet die Abfrage:

SELECT * FROM obj.FIRMA

Die Select-Klausel kann folgendermaßen verwendet werden:

SELECT FIR.NAME FROM FIRMA AS FIR;

Ein SQL-Join mit der Hibernate Query Language sieht zum Beispiel folgendermaßen aus:

SELECT *
FROM FIRMA AS FIR
INNER JOIN FIR.FIR_ADR AS FIR_ADR
INNER JOIN FIR.RECHNUNG AS RECHNUNG

Soll das Abfrageergebnis nach der Firmenanschrift der abgefragten Werte sortiert werden, sieht die Abfrage in Hibernate Query Language (HQL) folgendermaßen aus:

SELECT FIR_ADR.ADRUSER
FROM FIRMA AS FIR
INNER JOIN FIR.FIR_ADR AS FIR_ADR
ORDER BY FIR_ADR.ADRUSER

Hibernate Query Language (HQL) Beispiel

Im Hibernate Query Language (HQL) Beispiel sollen die Rechnungsnummern und deren Gesamtsummen eines Kunden aufgelistet werden. Dabei sollen nur die Rechnungen angezeigt werden, die eine bestimmte Mindestgrenze von 1000,00 € überschreiten. Das Hibernate Query Language-Statement wird folgendermaßen aufgebaut:

SELECT FIR.NAME, RECHNUNG.RENR, SUM(RECH_POX.MENGE*ARTIKEL.PREIS)
FROM FIRMA AS FIR
INNER JOIN FIR.RECHNUNG AS RECHNUNG
INNER JOIN RECHNUNG.RECH_POX AS RECH_POX
INNER JOIN ARTIKEL AS ARTIKEL
WHERE FIR.NAME = :FIRMA
GROUP BY RECHNUNG.RENR
HAVING SUM(RECH_POX.MENGE*ARTIKEL.PREIS) > 1000
ORDER BY RECHNUNG.RENR

Der HiberNate O-R Mapper übersetzt das Hibernate Query Language-Statement in das folgende SQL-Statement in einer relationalen Datenbank:

SELECT FIR.NAME, RECHNUNG.RENR, SUM(RECH_POX.MENGE*ARTIKEL.PREIS) 
FROM FIRMA AS FIR 
INNER JOIN RECHNUNG AS RECHNUNG 
ON FIR.FIRNR = RECHNUNG.FIRNR
INNER JOIN RECHNUNG.RECH_POX AS RECH_POX 
ON RECHNUNG.RENR = RECHNUNG.RENR
INNER JOIN ARTIKEL AS ARTIKEL 
ON RECH_POX.ARTNR = ARTIKEL.ARTNR
WHERE FIR.NAME = :FIRMA 
GROUP BY FIR.NAME, RECHNUNG.RENR 
HAVING SUM(RECH_POX.MENGE*ARTIKEL.PREIS) > 1000 
ORDER BY RECHNUNG.RENR

Bitte bewerten (1 - 5):