【问题标题】:How can I select a boolean literal in HQL?如何在 HQL 中选择布尔文字?
【发布时间】:2016-06-25 23:38:11
【问题描述】:

我可以像这样在 HQL 中选择 int 和 string 文字:

select 'a string' as StringLiteral, 1 as IntLiteral from Eg.MyClass

但我还没有找到选择布尔文字的方法。我尝试过select true ...select new bool true ...,但它们会导致 HQL 语法异常。

有没有办法在 HQL 中选择布尔文字?

我找到了解决方法 (select case when (1=1) then true...),但这似乎效率低下……

【问题讨论】:

    标签: c# nhibernate hql nhibernate-4


    【解决方案1】:

    SQL 中实际上没有真正的布尔值(如Select 1=1),除了 in 条件。 HQL 将“真”和“假”变成 0 和 1 我认为(你可以在某处配置),但我猜它仍然是一个整数。

    您最可能做的最简单的事情就是在查询后将整数转换为内存中的布尔值。

    【讨论】:

    • 演员可以在 HQL 中完成。见我的answer
    【解决方案2】:
    select cast(1 as bool) as bitLiteral from Eg.MyClass
    

    NHibernate 通常支持与 Hibernate 相同的功能。这是从answer 详细阐述的。我已经用 NHibernate 对其进行了测试。

    NHibernate 将 SQL bit 类型映射到 .Net bool 类型。

    在普通 SQL 中也需要转换,如 SQL(至少是 SQL Server Transact-SQL)lacks bit literals

    【讨论】:

    • 哇,这真的很棒。不知道这个。很酷的一点是您可以在as 之后使用 (N)Hibernate 类型,而不是某种特定于 DBMS 的类型。您仍然无法将布尔表达式转换为 bool(如 1=1,仅在使用 CASE 表达式时),这是我经常错过的。
    猜你喜欢
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多