我想将Oracle中的以下查询转换为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()
使其与数据库无关,并且不想使用Native SQL
如何在Hibernate中编写上述查询?
答案 0 :(得分:0)
你为什么这样? HQL查询是基于字符串的,CreateSqlQuery也是如此。如果您使用Session.CreateSqlQuery()
,则无需了解有关HQL语法的任何信息。
答案 1 :(得分:0)
首先,您必须创建名为Home
的实体。 HQL不支持decode
函数,但您可以使用如下公式创建属性:
<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
答案 2 :(得分:0)
您可以使用 case 而不是解码。
用例您的查询将从转换
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
到
select
SYSTEM,
sum(case when trim(XAXIS) = 'HIGH' then YAXIS else 0 end) H,
sum(case when trim(XAXIS) = 'MEDIUM' then YAXIS else 0 end) M,
sum(case when trim(XAXIS) = 'LOW' then YAXIS else 0 end) L
from HOME
where
DATA_KEY=5
GROUP BY SYSTEM