Как выбрать логический литерал в HQL?
Я могу выбрать int и строковые литералы в HQL следующим образом:
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...
), но это кажется неэффективным...
2 ответа
На самом деле в SQL нет настоящих логических выражений (как в Select 1=1
), кроме как в условиях. HQL превращает "true" и "false" в 0 и 1, я думаю (что-то, что вы можете настроить где-то), но я думаю, что это все еще целое число.
Самые простые вещи, которые вы, скорее всего, можете сделать, это преобразовать целое число в логическое значение в памяти после запроса.
select cast(1 as bool) as bitLiteral from Eg.MyClass
NHibernate обычно поддерживает те же функции, что и Hibernate. Это было разработано из этого ответа. Я проверил это с NHibernate.
NHibernate карты SQL bit
введите.Net bool
тип.
Приведение также требуется в обычном SQL, поскольку в SQL (по крайней мере, в SQL Server Transact-SQL) отсутствуют битовые литералы.