2010-01-07 21 views
6

Soy nuevo en HQL y tienen una expresión SQL que necesito convertida pero no puedo seleccionar la instrucción SQL es:Cómo seleccionar entre HQL

select SenseDate as Time,SenseValue as Value 
from UserData 
where NetworkID = '23' 
and IODeviceID = '129' 
and SenseDate >= DateAdd("d",-1, GETDATE()) 
and SenseDate<=GETDATE() 

que se puede ejecutar en esta parte HQL sin problemas:

from UserData 
where NetworkID = '23' 
and IODeviceID = '129' 
and SenseDate >= DateAdd(d,-1, GETDATE()) 
and SenseDate<=GETDATE() 

Sin embargo yo sólo quieren que los SenseDate y SenseValue valores devueltos, alguien podría enseñarme cómo seleccionar como cuando intento agregar select SenseDate, SenseValue etc. quiero evitar errores en Netbeans

Respuesta

4

Creo que HQL tiene la palabra clave "nueva" ahora.

seleccione nueva familia (madre, compañera, offspr) de Eg.DomesticCat como madre unirse mother.Mate como compañero de dejó unirse a mother.Kittens como offspr

similares a las proyecciones/resulttransformers en el mundo de Criteria.

5

Se pueden seleccionar los campos/columnas utilizando HQL. Tiene el siguiente aspecto:

select 
    SenseDate, 
    SenseValue 
from 
    UserData 
where 
    NetworkID = '23' 
and 
    IODeviceID = '129' 
and 
    SenseDate >= DateAdd(d, -1, GETDATE()) 
and 
    SenseDate <= GETDATE() 

Cuando se ejecuta este usted recibirá una lista de las matrices de objetos:

final List<Object[]> values = query.list(); 

Cada elemento de la lista representa una fila encontrado. La matriz en sí contiene los dos campos seleccionados en el mismo orden en que los declaró en la declaración.

4

Tendrás que usar algo como proyecciones.

Esto significa que tendrá que crear una clase que contenga los resultados que intenta recuperar.

En su caso, esto podría ser algo como esto:

public class SenseUserData 
{ 
    public DateTime SenseDate 
    { 
     get; 
     private set; 
    } 

    public Decimal SenseValue 
    { 
     get; 
     private set; 
    } 

    public SenseUserData(DateTime date, Decimal value) 
    { 
     this.SenseDate = date; 
     this.SenseValue = value; 
    } 
} 

Entonces, usted tiene que dejar NHibernate sabe de la existencia de esta clase. Puede hacerlo, 'importándolo'. lo tanto, esto significa que usted no tiene que crear un archivo de asignación para ello, sólo hay que hacer esto en un archivo de HBM:

<import class="myclassname" /> 

Y entonces, sólo puede hacerlo en HQL:

select new SenseUserData (SenseDate, SenseValue) from UserData 
+0

¡Justo lo que estaba buscando, gracias! – strattonn

Cuestiones relacionadas