2010-03-12 10 views
5

Ho una domanda HQL Hibernate. Mi piacerebbe scrivere una sottoquery come tabella derivata (per motivi di prestazioni). È possibile farlo in HQL? Esempio:Sottoquery utilizzando la tabella derivata in Hibernate HQL

FROM Customer WHERE country.id in 
(SELECT id FROM (SELECT id FROM Country where type='GREEN') derivedTable) 

(a proposito, questo è solo un esempio di query in modo da non dare consigli su riscriverlo, è proprio il concetto di tabella derivata Mi interessa)

risposta

2

tavoli Purtroppo no, derivati al momento non funzionano in HQL. Per esempio, le seguenti opere:

List<int> result = 
    nHSession.CreateQuery(@"select distinct Id from User u") 
    .List<int>().ToList(); 

... il seguente genera l'questa eccezione: eccezione di tipo 'Antlr.Runtime.NoViableAltException' è stato gettato. vicino alla riga 1, colonna 24 [selezionare Id distinta da (selezionare u da S2.BP.Model.User u)]

List<int> result = nHSession.CreateQuery(
    @"select distinct Id from (select u from User u)") 
    .List<int>().ToList(); 

Il retro caduta sarebbe creare una query denominata contenente SQL prime oa creare una stored procedure e richiamare tramite query denominata, in questo modo:

List<int> result = nHSession.GetNamedQuery("spUserIds") 
    .SetInt32("id", 3) 
    .List<int>().ToList(); 
Problemi correlati