top to_number to_char query java hibernate select hql

java - to_number - hql top 1



Cómo seleccionar desde HQL (4)

Soy nuevo en HQL y tengo una expresión SQL que necesito convertir pero no puedo seleccionar que la declaración SQL sea:

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

Puedo ejecutar esta parte en HQL sin problemas:

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

Sin embargo, solo quiero que se SenseDate SenseValue valores de SenseDate y SenseValue , ¿podría alguien mostrarme cómo seleccionarlos cuando intente agregar select SenseDate, SenseValue etc. sigo recibiendo errores en Netbeans?


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

seleccione familia nueva (madre, compañero, descendiente) de Eg.DomesticCat como madre se une a madre.Mate como compañero se unió a mother.Kittens como offspr

Similar a las proyecciones / transformadores de resultados en el mundo Criteria.



Puede seleccionar campos / columnas usando HQL. Se parece a lo siguiente:

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

Cuando ejecutas esto, recibirás una lista de matrices de objetos:

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

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


Tendrás que usar algo como proyecciones.

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

En tu caso, esto podría verse más o menos así:

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; } }

Luego, deberá informar a NHibernate sobre la existencia de esta clase. Usted puede hacer eso, ''importándolo''. Entonces, esto significa que no tiene que crear un archivo de mapeo, solo tiene que hacer esto en un archivo hbm:

<import class="myclassname" />

Y luego, puedes hacer esto en HQL:

select new SenseUserData (SenseDate, SenseValue) from UserData