2013-12-16 34 views
0

我正在使用類似的查詢,例如發佈here的查詢來按給定順序獲取對象列表。按給定順序Hibernate和Oracle訂單

我也有兩個環境,其中一個使用MySQL,另一個使用Oracle。在MySQL中,該答案中給出的HQL(在此處發佈以供參考)工作正常,但切換到Oracle時,它轉換爲相同的結果SQL,這是無效的。

所以我希望能拓展Oracle10gDialect並提供翻譯成該Oracle SQL兼容:

select q.id    
     from 
      Question q 
     where 
      q.id in (
       1701, 1698, 1264 
      ) 
     order by 
      decode(q.id, 
      1701, 1, 1698, 2, 1264 , 3) 

但我不知道如何定義我的功能。當按位處理,我延長了方言和使用此代碼:

registerFunction("bwand", new SQLFunctionTemplate(IntegerType.INSTANCE, "BITAND(?1, ?2)")); 

,工作正常,但在這種情況下,我需要提供的圖案爲ID列表,隨後其訂單指數,和我不噸知道如何得到該索引號。

任何幫助?

+0

如果對象的數量很小,你可以做排序在Java中。 –

回答

0

Oracle,MySQL和(我相信)Hibernate都支持order by子句中的case語句。

所以,你可以寫爲:

order by (case when q.id = 1701 then 1 
       when q.id = 1698 then 2 
       when q.id = 12c4 then 3 
      end)