mysql - 如何在 Nhibernate 中使用 MySql date_add?

标签 mysql nhibernate hql dateadd

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

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>

最佳答案

你能发布整个 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 或标准构建代码会很有用。

关于mysql - 如何在 Nhibernate 中使用 MySql date_add?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2658302/

相关文章:

MySQL 工作台 6.3 : how should I insert a new column into a specific position (in the middle of the table)

MySQL - 使用带计数的条件?

c# Nhibernate 使用动态参数创建查询

java - Hibernate 和多线程逻辑

MySQL 反向搜索

php - 多个 PHP IF 语句;寻找一种方法来收紧我的代码

c# - 为什么 MSDTC 在使用 mstest 进行单元测试时表现不一致?

nhibernate - Strict vs NonStrict NHibernate 缓存并发策略

hadoop - Netezza和Hive for Hadoop ACID是否兼容?

java - Hibernate:如何使用 CONCAT 和 GROUP_CONCAT