2010-03-12 18 views
5

Tengo una pregunta HQLnate HQL. Me gustaría escribir una subconsulta como tabla derivada (por motivos de rendimiento). ¿Es posible hacer eso en HQL? Ejemplo:Subconsultar utilizando la tabla derivada en Hibernate HQL

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

(por cierto, esto es sólo un ejemplo de consulta así que no da consejos sobre la reescritura, es sólo el concepto tabla derivada Me interesa)

Respuesta

2

tablas Desafortunadamente no, derivados actualmente no trabaja en HQL. Por ejemplo, las siguientes obras:

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

... la siguiente tiros esta excepción: excepción de tipo 'Antlr.Runtime.NoViableAltException' fue lanzado. cerca de la línea 1, columna 24 [seleccionar Id distinto de (seleccione U desde S2.BP.Model.User u)]

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

La parte posterior caída sería la creación de una consulta con nombre que contiene sql crudo o a crear un procedimiento almacenado y invocarlo mediante consulta con nombre, así:

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