【问题标题】:How to use bitwise operators in HQL?如何在 HQL 中使用位运算符?
【发布时间】:2010-11-13 18:15:57
【问题描述】:

在 HQL 中,如何使用位运算符?我希望生成的 SQL 查询看起来像

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

但是,编写这个 HQL

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

给我这个错误:NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:抛出了“Antlr.Runtime.NoViableAltException”类型的异常。

【问题讨论】:

    标签: nhibernate hql


    【解决方案1】:

    根据 NHibernate Jira 看来,这应该从 2.1.0Beta2 开始工作,https://nhibernate.jira.com/browse/NH-1192。

    【讨论】:

      【解决方案2】:

      我找到了解决方案。以这种方式编写 HQL 是可行的:

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

      【讨论】:

      • 您可能需要担心 > 运算符,因为如果您设置符号位,则该值可能为负数。除非它是无符号类型......但如果我是你,我只会使用 。
      【解决方案3】:

      从NHibernate documentation 的第 13.8 节开始,HQL 不支持这些位运算符。您必须恢复为原生 SQL(参见第 15 节)。

      【讨论】:

      • 这也是我的想法,直到我通过 NHibernate 的源代码找到了一个测试 (bit.ly/1Wjk1)。根据测试,似乎是可以的。
      • 在这种情况下,这看起来可能已在 2.1 中修复,或者将在后续版本中修复。你用的是什么版本?
      猜你喜欢
      • 2013-10-15
      • 2014-07-17
      • 2011-05-30
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 2010-12-26
      相关资源
      最近更新 更多