如何 select HQL 中的布尔文字?

How can I select a boolean literal in HQL?

我可以 select HQL 中的 int 和字符串文字,如下所示:

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

但我还没有找到 select 布尔文字的方法。我试过 select true ...select new bool true ... 但这些会导致 HQL 语法异常。

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

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

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

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

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.