Ключевые слова 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.