2010-04-17 3 views
0

Почему Nibernate HQL не может обработать следующий запрос:NHibernate и MySql Ключевые слова

from Deal D where (D.ApprovalDate + INTERVAL 1 Year) < current_timestamp() < (D.RenewalDate + INTERVAL -1 Year) 

зная, что ИНТЕРВАЛ и YEAR ключевые слова в MySQL, так что это своего рода смешивание Sql в HQL (если HQL не может обрабатывать функции даты вроде так, и я не знаю). Диалект MySQLDialect

Сво вполне допустимо, чтобы выполнить этот запрос

SELECT '2005-01-01' + INTERVAL 1 Year; 
+1

Вы хотите использовать hql или sql? простите меня, если я не понял ничего из этого, но вы намеренно используете sql в hql? Я не уверен, если вы можете сделать это –

+0

, вы используете правильный диалект? например MySQL5Dialect –

+1

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

ответ

1

Вы можете передать Sql непосредственно в запросе с использованием критериев запроса. Что-то вроде этого

Session.CreateCriteria<Deal>() 
.Add(Restrictions.Sql(D.ApprovalDate + " INTERVAL 1 Year < current_timestamp() < " + D.RenewalDate + " INTERVAL -1 Year") 

The Restrictions.Sql передаст все, что вы дадите непосредственно базе данных, как sql.

+0

Спасибо за это предложение, но я строгий запрос HQL динамически. Я рассмотрю это решение, но вы думаете, что есть что-то мощное, которое работает с hql, любые идеи? –

+0

Мне любопытно, почему вы выбираете HQL по критериям. Запросы критериев сводятся к HQL, поэтому можно делать то, что вы пытаетесь, но я никогда не выяснял, как это сделать. У меня были аналогичные проблемы, связанные с передачей Sql напрямую и в результате использовались критерии. Вы вынуждены использовать HQL? – Adam

+0

Ну, нет! Но если это расплавится до hql, мне интересно, как выглядит этот hql :) ... Еще раз спасибо за ваши огромные усилия –

Смежные вопросы