2010-04-17 3 views
2

Это действительно озадачило часы, я искал по всему Интернету, но не получил рабочего решения. Может кто-то указать, где проблема ... спасибо! я создал мой собственный класс диалектКак использовать MySql date_add в Nhibernate?

public class MySQLDialectExtended : MySQLDialect 
{ 
    public MySQLDialectExtended() 
    { 
     RegisterFunction("date_add_interval", new SQLFunctionTemplate(NHibernateUtil.Date, "date_add(?1, INTERVAL ?2 ?3)"));    
    } 
} 

Тогда я пытаюсь использовать его следующим образом:

query.Append(
    " (date_add_interval(D.ApprovalDate, 1, YEAR) < current_timestamp() < date_add_interval(D.RenewalDate, -1, YEAR))"); 

Это терпит неудачу с исключением следующего:

NHibernate.Hql.Ast.ANTLR.QuerySyntaxException : Exception of type 'Antlr.Runtime.NoViableAltException' was thrown. near line 1, column 677 

где номер столбца на конец первого слова «YEAR».

Edit: вот моя конфигурация

<property name="dialect">MyCompanyName.MySQLDialectExtended, MyCompanyName</property> 
    <property name="hbm2ddl.keywords">none</property> 

ответ

0

Вы можете разместить весь запрос NHibernate?

UPDATE: Ну, запрос, очевидно, неверен ошибочный:

Select distinct D from MBIgnition.Core.Domain.Model.Deal D where 1=1 and 
((D.MortgageStatus = 30) or 
    (D.MortgageStatus = 35) or 
    (D.MortgageStatus = 40) or 
    (D.MortgageStatus = 45) or 
    (D.MortgageStatus = 55) or 
    (D.MortgageStatus = 50)) and 
    // next line is erroneous as the first AND operator does not have a lefthand side operand 
((and (date_add_interval(D.ApprovalDate, 1, YEAR) < current_timestamp() < date_add_interval(D.RenewalDate, -1, YEAR)))) 

Как вы можете видеть, есть AND оператор в коде без какой-либо на сторону левой аргументы. В вашем HQL должно быть что-то не так. Дважды проверьте его снова, и если вы не можете точно определить ошибку, будет полезно разместить здесь HQL или код построения критериев.

+0

Его длинный запрос и нерелевантность проблемы, я создал более короткую версию Исключение типа 'Antlr.Runtime.NoViableAltException' было брошено. рядом с строкой 1, столбец 266 [Выберите отдельный D из MBIgnition.Core.Domain.Model.Deal D где 1 = 1 и ((D.MortgageStatus = 30) или (D.MortgageStatus = 35) или (D.MortgageStatus = 40) или (D.MortgageStatus = 45) или (D.MortgageStatus = 55) или (D.MortgageStatus = 50)) и ((и (date_add_interval (D.ApprovalDate, 1, YEAR)

+0

Вы были правы, этот запрос был искажен. Я исправил его, но все еще получаю эту ошибку: NHibernate.Hql.Ast.ANTLR.QuerySyntaxException: было исключено исключение типа «Antlr.Runtime.NoViableAltException». рядом с строкой 1, столбец 133 [выберите отдельный D из MBIgnition.Core.Domain.Model.Deal D где 1 = 1 и ((1 = 1 и (date_add_interval (D.ApprovalDate, 1, YEAR)

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

  • Нет связанных вопросов^_^