簡體   English   中英

如何從HQL中選擇

[英]How to select from HQL

我是HQL的新手並且有一個我需要轉換的SQL表達式但是我無法選擇SQL語句:

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

我可以在HQL中運行這部分而不會出現問題:

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

不過,我只希望SenseDateSenseValue返回的值,可能會有人告訴我如何選擇,當我嘗試添加select SenseDate, SenseValue等我把Netbeans中收到錯誤

您可以使用HQL選擇字段/列。 看起來如下:

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

執行此操作時,您將收到一個對象數組列表:

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

列表中的每個元素代表一個找到的行。 數組本身包含兩個選定的字段,其順序與您在語句中聲明的順序相同。

我認為HQL現在有“新”關鍵字。

選擇新的家庭(母親,伴侶,offspr)從Eg.DomesticCat作為母親加入母親。伴侶作為伴侶離開加入母親.Kittens as offspr

與Criteria世界中的projection / resulttransformers類似。

你必須使用像投影這樣的東西。

這意味着,您必須創建一個包含您嘗試檢索的結果的類。

在您的情況下,這可能看起來像這樣:

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

然后,你必須讓NHibernate知道這個類的存在。 你可以通過'導入'來做到這一點。 因此,這意味着您不必為它創建映射文件,您只需在hbm文件中執行此操作:

<import class="myclassname" />

然后,您可以在HQL中執行此操作:

select new SenseUserData (SenseDate, SenseValue) from UserData

看起來你需要做hibernate調用的預測。 以下是有關如何在HQL中進行投影的一些信息:

http://www.devarticles.com/c/a/Java/Hibernate-HQL-in-Depth/1/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM