2009-07-24 6 views
3

In HQL, wie kann ich bitweise Operatoren verwenden? Ich möchte die resultierende SQL-Abfrage jedoch so etwas wieWie werden bitweise Operatoren in HQL verwendet?

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

suchen, dieses HQL schreiben

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

gibt mir diese Fehlermeldung: NHibernate.Hql.Ast.ANTLR.QuerySyntaxException: Ausnahme vom Typ ‚Antlr .Runtime.NoViableAltException 'wurde ausgelöst.

Antwort

4

Ich habe eine Lösung gefunden. Das Schreiben der HQL auf diese Weise funktioniert:

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

Sie könnten sich Sorgen über den Operator> machen, denn wenn Sie Ihr Vorzeichen setzen, könnte der Wert negativ sein. Es sei denn, es ist ein nicht signierter Typ ... aber ich würde einfach <> verwenden, wenn ich du wäre. –

0

Aus Abschnitt 13.8 der NHibernate documentation unterstützt HQL diese bitweisen Operatoren nicht. Sie müssten zu nativem SQL zurückkehren (siehe Abschnitt 15).

+0

Das ist, was ich dachte auch, bis ich einen Test (http://bit.ly/1Wjk1), während er durch NHibernate Quelle gefunden. Dem Test zufolge scheint es möglich zu sein. –

+0

In diesem Fall sieht es so aus, als wäre dies etwas, das in 2.1 behoben wurde oder in einer nachfolgenden Version behoben wird. Welche Version verwendest du? –

+0

Ich benutze Version 2.1 –