2012-05-16 12 views
8

DiagramHQL: è possibile eseguire un JOIN INTERNO su una sottoquery?

Lo schema precedente è una versione semplificata della struttura del database che utilizzo per registrare le posizioni delle posizioni nel tempo. Ho scritto la seguente query SQL che restituisce l'inventario voce corrente di ogni luogo:

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 

Il problema che sto avendo è che voglio convertire tale a HQL, ma non ho trovato la sintassi per eseguire un INNER JOIN in una sottoquery e sembra che questo non sia supportato. C'è un modo per convertire quanto sopra in HQL (o un criterio) o dovrò usare una query SQL standard in questo caso? Grazie.

risposta

9

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

noti che subquery HQL può avvenire solo nelle clausole selezionare o dove.

È possibile riscrivere la query in modo che la sottoquery faccia parte della clausola where. Fare riferimento a l.idItem nella subquery

+0

Come sarebbe? –

+0

@CarlG Bene senza prove e utilizzando l'esempio dalla questione ... qualcosa sulla falsariga di: 'selezionare l da ItemLocationLog l dove l.dateTime = ( select max (g.dateTime) da ItemLocationLog g dove g.idItem = l.idItem ) ' – Arkaine55

Problemi correlati