2012-05-16 170 views
8

DiagramHQL:是否可以在子查詢上執行INNER JOIN?

上圖是我用來通過時間記錄項目位置的簡化版數據庫結構。我寫了下面的SQL查詢返回的每個位置的當前項目盤點:

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 

我遇到的問題是,我想將其轉換成HQL,但我還沒有找到執行語法INNER JOIN在子查詢上,似乎不支持。有沒有辦法將上述內容轉換爲HQL(或Criteria),還是必須在這種情況下使用標準SQL查詢?謝謝。

回答

9

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

注意,HQL自查詢只能出現在select或者where子句。

您可以重寫查詢,以便子查詢是where子句的一部分。在子查詢中引用l.idItem

+0

這看起來像什麼? –

+0

@CarlG良好,沒有檢測和使用從所述問題的示例...沿的線的東西:'從ItemLocationLog升 其中l.dateTime =( 選擇最大值(g.dateTime) 從ItemLocationLog克 其中選擇升 g.idItem = l.idItem )' – Arkaine55