Можно ли выбрать значение NULL в качестве значения столбца в HQL-запросе? - PullRequest
11 голосов
/ 31 июля 2010

Мне нужен список из трех столбцов.столбец 1-й и 3-й имеет значения, а 2-й как ноль.Могу ли я сделать это с помощью HQL-запроса?

Мне нужно что-то вроде этого:

select id, null, name from MyClass

Где MyClass, как и базовая таблица, имеет только два свойства / столбца, то есть "id" и "name"

Ответы [ 4 ]

15 голосов
/ 31 июля 2010

Другой вариант, который работает (проверено на 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 ...
4 голосов
/ 05 мая 2011

Вы можете использовать функцию nullif() для генерации нуля.

Он принимает два аргумента. Если аргументы равны, он вернет null значение.

1 голос
/ 14 апреля 2011

Вы также можете попробовать TO_CHAR (ноль). Отлично работает для HQL-Oracle в конструкторе new Foo (id, name, attr3), где attr3 - строковое значение

1 голос
/ 31 июля 2010

AFAIK, ваш запрос не вернет ожидаемый результат, он вернет только столбцы до null (id в вашем случае). Тем не менее, следующее будет работать

select id as first, '', name from MyClass

Я не знаю, является ли это ошибкой или просто не поддерживаемой функцией (справка HQL: возможно "выбрать NULL как ..."? на форумах Hibernate, кажется, это ошибка).

Я не уверен, что понял, зачем вам это нужно (может ли выражение select new быть альтернативой?), Но я боюсь, что вам придется использовать нативный SQL здесь.

...