Можно ли выбрать значение 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