2010-01-07 2 views
6

Je suis nouveau à HQL et une expression SQL que j'ai besoin converti mais je suis incapable de sélectionner l'instruction SQL est:Comment choisir parmi 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() 

je peux exécuter cette partie à HQL sans problème:

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

Cependant, je veux que les valeurs SenseDate et SenseValue retour, quelqu'un pourrait me montrer comment choisir comme lorsque je tente d'ajouter select SenseDate, SenseValue etc. Je continue à obtenir des erreurs dans Netbeans

Répondre

4

Je pense que HQL a le "nouveau" mot-clé maintenant.

choisir une nouvelle famille (mère, sœur, offspr) de Eg.DomesticCat en tant que mère rejoindre mother.Mate comme compagnon jointure gauche mother.Kittens comme offspr

similaires aux projections/resulttransformers dans le monde des critères.

5

Vous pouvez sélectionner les champs/colonnes à l'aide HQL. Se présente comme suit:

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

Lorsque vous exécutez cela, vous recevrez une liste de tableaux d'objets:

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

Chaque élément de la liste représente une ligne trouvée. Le tableau contient lui-même les deux champs sélectionnés dans le même ordre que vous les avez déclarés dans l'instruction.

4

Vous devrez utiliser quelque chose comme des projections.

Cela signifie que vous devrez créer une classe qui contiendra les résultats que vous essayez de récupérer.

Dans votre cas, cela pourrait ressembler à ceci:

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

Ensuite, vous devrez laisser NHibernate connaître l'existence de cette classe. Vous pouvez le faire en "l'important". Donc, cela signifie que vous ne devez pas créer un fichier de mappage pour cela, il vous suffit de le faire dans un fichier HBM:

<import class="myclassname" /> 

Et puis, vous pouvez tout faire en HQL:

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

Juste ce que je cherchais, merci! – strattonn

Questions connexes