[英]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()
不過,我只希望SenseDate
和SenseValue
返回的值,可能會有人告訴我如何選擇,當我嘗試添加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.