1

我想将 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 中编写上述查询?

4

3 回答 3

1

您可以使用大小写而不是解码。

使用案例您的查询将从

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
于 2021-04-20T07:22:31.140 回答
0

你为什么要?HQL 查询是基于字符串的,CreateSqlQuery 也是如此。如果您使用Session.CreateSqlQuery(),则无需了解有关 HQL 语法的任何信息。

于 2013-04-08T12:07:49.040 回答
0

首先,您必须创建一个名为Home. decodeHQL 不支持函数,但您可以使用如下公式创建属性:

<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
于 2013-04-08T14:23:10.660 回答