Как выбрать логический литерал в 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) отсутствуют битовые литералы.

Другие вопросы по тегам