2013-04-08 2 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(), чтобы сделать его от базы данных и не хочу использовать Native SQL

Как я пишу выше запрос в Hibernate?

ответ

0

Зачем вам это нужно? запрос HQL основан на строках, поэтому CreateSqlQuery. если вы используете Session.CreateSqlQuery(), вам не нужно ничего знать о синтаксисе HQL.

+0

СПАСИБО !!!!!! –

+2

Я хочу использовать createQuery(), чтобы сделать его независимым от базы данных – user2077648

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

+0

Нужно ли мне добавить еще 2 атрибута prop1 и prop2 в класс сущности Home? – user2077648

+0

Да, просто добавьте их в 'HOME.hbm.xml'. Помните, что классы Java и свойства чувствительны к регистру в HQL. – lunr

Смежные вопросы