2013-04-08 174 views
0

我要在以下Oracle查詢轉換爲Hibernate的HQL查詢如何將解碼查詢轉換爲Hibernate(HQL)中的查詢?

select 
     SYSTEM, 
     sum(decode(trim(XAXIS),'HIGH',YAXIS,0)) H, 
     sum(decode(trim(XAXIS),'MEDIUM',YAXIS,0)) M, 
     sum(decode(trim(XAXIS),'LOW',YAXIS,0)) L 
     from HOME 
     where 
      DATA_KEY=5 
     GROUP BY SYSTEM 

我想用createQuery(),使其獨立於數據庫,並且不希望使用本地SQL

我怎樣寫以上在Hibernate中查詢?

回答

0

你爲什麼?一個HQL查詢是基於字符串的,而CreateSqlQuery也是。如果您使用Session.CreateSqlQuery(),則不需要了解有關HQL合成文本的任何信息。

+0

謝謝!!!!!! – 2013-04-08 12:08:59

+2

我想使用createQuery()使其與數據庫無關 – user2077648 2013-04-08 12:49:29

0

首先,您必須創建一個名爲Home的實體。 decode功能不支持HQL,但你可以用這樣的公式創建一個屬性:

<property name="prop1" type="Double" formula="decode(trim(XAXIS),'HIGH',YAXIS,0)" /> 
<property name="prop2" type="Double" formula="decode(trim(XAXIS),'MEDIUM',YAXIS,0)" /> 
<property name="prop3" type="Double" formula="decode(trim(XAXIS),'LOW',YAXIS,0)" /> 

然後,你可以寫你的HQL查詢:

select 
    h.SYSTEM, 
    sum(h.prop1) H, 
    sum(h.prop2) M, 
    sum(h.prop3) L 
from HOME h 
where h.DATA_KEY=5 
GROUP BY h.SYSTEM 
+0

我在哪裏添加 標籤,我目前使用註釋 – user2077648 2013-04-09 02:42:12

+0

我需要2添加2個屬性prop1和prop2到我的實體類首頁? – user2077648 2013-04-09 02:48:57

+0

是的,只需將它們添加到'HOME.hbm.xml'中即可。請注意,Java類和屬性在HQL中區分大小寫。 – lunr 2013-04-09 06:13:08