Ключевые слова NHibernate и MySql

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

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

зная, что INTERVAL и YEAR - это ключевые слова в MySQL, так что это своего рода смешивание Sql в Hql (если только Hql не может обрабатывать функции даты, как, например, и я не знаю) . Диалект MySQLDialect

Совершенно верно для выполнения этого запроса

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам