【问题标题】:How to use MySql date_add in Nhibernate?如何在 Nhibernate 中使用 MySql date_add?
【发布时间】:2010-04-17 12:14:11
【问题描述】:

这真的很困惑几个小时,我搜索了整个互联网,但没有找到有效的解决方案。有人可以指出问题出在哪里...谢谢! 我创建了自己的方言类

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”字的末尾。

编辑: 这是我的配置

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

【问题讨论】:

    标签: mysql nhibernate hql dateadd


    【解决方案1】:

    你能发布整个 NHibernate 查询吗?

    更新:嗯,查询显然是错误的和错误的:

    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 或标准构建代码将很有用。

    【讨论】:

    • 这是一个很长的查询并且与问题无关,我创建了一个较短版本的“Antlr.Runtime.NoViableAltException”类型的异常被抛出。靠近第 1 行,第 266 列 [从 MBIgnition.Core.Domain.Model.Deal D 中选择不同的 D,其中 1=1 和 ((D.MortgageStatus = 30) 或 (D.MortgageStatus = 35) 或 (D.MortgageStatus = 40)或 (D.MortgageStatus = 45 ) 或 (D.MortgageStatus = 55 ) 或 (D.MortgageStatus = 50 ) 和 (( and ( date_add_interval(D.ApprovalDate, 1, YEAR)
    • 您是对的,该查询格式错误。我修复了它,但仍然出现该错误:NHibernate.Hql.Ast.ANTLR.QuerySyntaxException : 引发了“Antlr.Runtime.NoViableAltException”类型的异常。靠近第 1 行,第 133 列 [从 MBIgnition.Core.Domain.Model.Deal D 中选择不同的 D,其中 1=1 和 (( 1= 1 和 ( date_add_interval(D.ApprovalDate, 1, YEAR)
    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2020-11-19
    • 2011-10-14
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多