2010-09-18 2 views
0

Я пытаюсь вызвать функцию базы данных от HQL. Оператор HQL должен просто вызвать функцию и возвращает его значение, как этотОперации HQL без предложения FROM и WHERE

select someFunction(:someParameter) 

Если я пытаюсь позвонить выбрать current_timestamp().

Это терпит неудачу с

NHibernate.Hql.Ast.ANTLR.QuerySyntaxException: Исключение типа 'Antlr.Runtime.MismatchedTreeNodeException' было брошено. рядом строка 1, столбец 24 [select current_timestamp()]

Я знаю, что нет никакой причины для извлечения текущей метки времени. Но я создал несколько пользовательских функций базы данных, которые я бы хотел выполнить с помощью модульного теста, вызвав их из HQL.

Мне кажется, что невозможно написать инструкцию HQL без предложения FROM и WHERE. Может ли это быть правдой?

IQuery query = unitOfWork.Session.CreateQuery("select current_timestamp()"); 

var ts = query.UniqueResult();

ответ

0
  1. Не имеет смысла вызывать такую ​​функцию. Либо у вас есть хранимая процедура, которая должна вызываться с использованием других методов, либо у вас есть функция, которая вообще не связана с БД, и поэтому не должна запускаться через базу данных для начала.

  2. В любом случае, если функция не работает над набором строк, не можете ли вы просто добавить какое-то необязательное предложение FROM, например, на маленькую статическую таблицу?

+0

1. Я согласен. Я делаю это только для проверки функций. –

+0

2. Я могу добавить необязательный пункт FROM. Недостатком является то, что тогда тест зависит от некоторого фиктивного отображения сущности. –

2

Это может работать, если вы явно сделать его SQL Query, а не запрос HQL:

var query = unitOfWork.Session.CreateSQLQuery("select current_timestamp()"); 
Смежные вопросы