2011-08-17 67 views
1

我的Hibernate的版本是3.2.6.ga別名在HQL表達式查詢

周圍的Googling揭示了許多人正與 Hibernate的HQL不處理別名同樣的問題非常好。顯然,HQL只允許 別名表中存在的列。此外,HQL會爲查詢中的所有列生成其自己的 別名,並且這些別名的格式爲 col_x_y_ 但這些生成方式如何生成我不知道。

對於我的情況,我想將兩個派生列添加到第三個派生列。 原生SQL中的微不足道,在HQL中令人驚訝地困難。

我做作,簡化的例子:

sqlcmd = " SELECT aa.course.code, " + 
     "  (CASE WHEN aa.gender = 'M' THEN 1 ELSE 0 END), " + 
     "  (CASE WHEN aa.gender = 'F' THEN 1 ELSE 0 END), " + 
     "  (col_0_1_ + col_0_2_) " + 
     "  FROM Student AS aa "; 

我怎樣才能加入第二和第三列在一起,從而形成一個HQL第4列?

TIA,

還是學習史蒂夫

回答

0

這是一個老問題,所以我希望你現在找到你的答案,但如果你沒有,我已經學到了一些新的關於nhibernate如何處理列別名的信息。所以這是我的答案。

sqlcmd = " SELECT aa.course.code, " + 
     "  (CASE WHEN aa.gender = 'M' THEN 1 ELSE 0 END), " + 
     "  (CASE WHEN aa.gender = 'F' THEN 1 ELSE 0 END), " + 
     "  (col_0_1_ + col_0_2_) " + 
     "  (col_0_2_ + col_0_3_) " + 
     "  FROM Student AS aa "; 

你真的注意到,NH生成它自己的列別名回答這個自己。我的研究告訴我,這只是在ORDER BY語句中,這是他們正在處理的錯誤。所以,老實說,我覺得你很好用自己的列別名的位置

sqlcmd = " SELECT aa.course.code, " + 
     "  (CASE WHEN aa.gender = 'M' THEN 1 ELSE 0 END) myCol1, " + 
     "  (CASE WHEN aa.gender = 'F' THEN 1 ELSE 0 END) myCol2, " + 
     "  (myCol1 + myCol2) myCol3 " + 
     "  (myCol2 + myCol3) myCol4 " + 
     "  FROM Student AS aa "; 

但在這兩種情況下,你可以繼續使用別名的是NH在你拋出,這將是在col_x_y_形式

希望這會有所幫助,祝你好運