2009-07-24 21 views
3

在HQL中,我該如何使用按位運算符?我想要得到的SQL查詢,看起來像如何在HQL中使用按位運算符?

SELECT RoleId, RoleName, RolePerms WHERE (RolePerms & @Parameter) = @Parameter 

然而,寫這個的HQL

select from Role where (RolePerms & :param) = :param 

給了我這個錯誤:NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:異常類型ANTLR的的「 .Runtime.NoViableAltException'被拋出。

回答

4

我找到了解決辦法。以這種方式編寫HQL的工作原理:

select r from Role r where (r.Permissions & :param) > 0 
0

根據NHibernate documentation的第13.8節,HQL不支持這些按位運算符。您必須恢復到原生SQL(請參閱第15節)。

+0

這就是我認爲,直到我發現一個測試(http://bit.ly/1Wjk1),而通過NHibernate的來源。根據測試,這似乎是可能的。 – 2009-07-24 14:40:28

+0

在這種情況下,它看起來可能是2.1中已經修復的東西,或者將在後續版本中修復。你使用什麼版本? – 2009-07-24 15:27:52