2013-04-03 13 views
15

Can HQL Selezionare sul set di risultati di un'altra query?
Per esempio:Can HQL Selezionare sul set di risultati di un'altra query?

SELECT COUNT(*) FROM (SELECT * FROM Table) 


posso farlo in SQL, ma quando ho provato come sopra nella HQL ma il solo a me mostrare errore di sintassi "token imprevisto: (vicino alla riga 1, colonna 22 ..."

+0

Ho lo stesso problema, Si prega di suggerire soluzione esatta è stato utilizzato –

risposta

11

HQL non supporto subqueries, tuttavia essi può avvenire solo nel selezionare o clausola where l'esempio che fornisci sarebbe meglio essere scritto come una dichiarazione di diritto in HQL Ad esempio:..

select count(*) from table t (where table is the entity name) 

Se il la query implica un'istruzione più complicata di (select * from Table), è consigliabile inserire questa logica in una vista e quindi creare un'entità basata su questa vista.

Per i database che supportano subselect, Hibernate supporta le subquery all'interno delle query. Una sottoquery deve essere racchiusa tra parentesi (spesso con una chiamata di funzione aggregata SQL). Sono consentite anche le subquery correlate (sottoquery che fanno riferimento a un alias nella query esterna).

Esempio

from DomesticCat as cat 
where cat.name not in (
    select name.nickName from Name as name 
) 
+0

C'è un criteri equivalenti? –

0

Utilizzando sottoquery come si desidera non è possibile . Un modo sta usando una distinta in questo modo:

SELECT COUNT(DISTINCT t.id) FROM table t INNER JOIN t.list l 
    WHERE t.status = 'ST1' AND l.status = 'ST2'" 

ho usato quello interno si uniscono per esprimere un selezionato ripetizione

Problemi correlati