Можно ли выбрать значение null в качестве значения столбца в запросе HQL?
Мне нужен список с тремя столбцами. столбец 1 и 3 имеет значения, а второй - как null.
Могу ли я сделать это через запрос HQL?
Мне нужно что-то вроде этого:
select id, null, name from MyClass
Где MyClass, а также базовая таблица имеют только два свойства/столбцы, то есть "id" и "name"
Ответы
Ответ 1
Другой вариант, который, кажется, работает (протестирован в DB2, MySQL, Oracle и SQL Server):
select id, cast(null as char), name from ...
Вы можете подклассифицировать диалект Hibernate и отбросить его с помощью специальной функции:
registerFunction("always_null",
new SQLFunctionTemplate(Hibernate.STRING, "cast(null as char)"));
а затем используйте это в своем HQL:
select id, always_null(), name from ...
Ответ 2
Вы можете использовать функцию nullif()
для генерации нуля.
Он принимает два аргумента. Если аргументы равны, он вернет значение null
.
Ответ 3
AFAIK, ваш запрос не вернет ожидаемый результат, он вернет столбцы до null
(id
в вашем случае). Однако следующее будет работать
select id as first, '', name from MyClass
Я не знаю, является ли это ошибкой или просто не поддерживается (Справка по HQL: возможно "выбрать NULL as..." ? на форумах Hibernate кажется, что это ошибка).
Я не уверен, что понял, зачем вам это нужно (может быть, выражение select new
является альтернативой?), но я боюсь, что вам придется использовать собственный SQL здесь.
Ответ 4
Вы также можете попробовать TO_CHAR (null). Он отлично работает для HQL-Oracle в конструкторе new Foo (id, name, attr3), где attr3 - String value