2012-05-16 3 views
8

DiagramHQL: Ist es möglich, einen INNER JOIN für eine Unterabfrage auszuführen?

Das obige Diagramm ist eine vereinfachte Version der Datenbankstruktur, mit der ich Positionen im Zeitverlauf protokollieren kann. Ich schrieb die folgende SQL-Abfrage, die den aktuellen Element Bestand an jedem Standort gibt:

select * 
from ItemLocationLog l 
inner join 
(select g.idItemLocationLog, max(g.dateTime) as latest 
from ItemLocationLog g 
group by g.idItem) 
as i 
on l.idItem = i.idItem and l.dateTime = i.latest 

Das Problem, das ich habe ist, dass ich das HQL konvertieren will, aber ich habe nicht die Syntax auszuführen eine gefunden INNER JOIN für eine Unterabfrage, und es scheint, als ob dies nicht unterstützt wird. Gibt es eine Möglichkeit, das obige in HQL (oder ein Kriterium) zu konvertieren, oder muss ich in diesem Fall eine Standard-SQL-Abfrage verwenden? Vielen Dank.

Antwort

9

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-subqueries

Beachten Sie, dass HQL Subqueries nur in den ausgewählten oder where-Klauseln auftreten können.

Sie können die Abfrage so umschreiben, dass die Unterabfrage stattdessen Teil der where-Klausel ist. Referenzieren des l.idItem in der Unterabfrage

+0

Wie würde das aussehen? –

+0

@CarlG Nun ohne Prüfung und das Beispiel von der Frage, mit ... etwas entlang der Linien von: 'l wählen aus ItemLocationLog l wo l.dateTime = ( select max (g.dateTime) von ItemLocationLog g wo g.idItem = l.idItem ) ' – Arkaine55