2013-04-08 176 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