Java 更新到3.6.5后,Hibernate映射到SQL公式的属性失败

Java 更新到3.6.5后,Hibernate映射到SQL公式的属性失败,java,mysql,hibernate,Java,Mysql,Hibernate,我刚从3.3.0.GA更新到Hibernate 3.6.5.Final,在对XML映射属性调用SQL公式时遇到问题: <property name="endDate" type="java.util.Date" formula="TIMESTAMPADD(SECOND, (quantity*60*60), transactionDate)" /> 问题很明显,this.SECOND应该是SECOND。在我看来,Hibernate将TIMESTAMPADD识

我刚从3.3.0.GA更新到Hibernate 3.6.5.Final,在对XML映射属性调用SQL公式时遇到问题:

<property
    name="endDate"
    type="java.util.Date"
    formula="TIMESTAMPADD(SECOND, (quantity*60*60), transactionDate)" 
/>
问题很明显,
this.SECOND
应该是
SECOND
。在我看来,Hibernate将
TIMESTAMPADD
识别为一个公式,而不是将
SECOND
识别为一个静态传递参数,因此认为它必须是表中的一列。我不确定如何告诉hibernate它应该按原样使用
SECOND

我在我的方言中尝试了
registerFunction
registerKeyword
,但没有成功,因为它们似乎与HQL函数定义有关,而不是公式中使用的本机SQL


有谁能告诉我正确的方向,或者告诉我Hibernate在这些版本之间有什么不同,以及我如何解决它吗?

我在Sql Server中遇到了相同类型的问题-类似的解决方案可能会奏效

这是我发现的。

所以,试着把引号放在第二位

<property
    name="endDate"
    type="java.util.Date"
    formula="TIMESTAMPADD(&quot;SECOND&quot;, (quantity*60*60), transactionDate)" 
/>


实际上,我不确定如何在这个xml属性中避免双引号,但我会先尝试
”,如果这不起作用
\”

,我刚刚升级到Hibernate 4.1.2,同样的问题又出现了。[SECOND]的解决方案不再有效,我不得不用自己的自定义方言注册关键字。比如:

public class ExtendedMySQL5InnoDBDialect extends MySQL5InnoDBDialect {

    public ExtendedMySQL5InnoDBDialect() {
        super();
        //make sure to register it in lowercase as uppercase does not work (took me 4 hours to realize)
        registerKeyword("second");

    }
}

MySQL 5.0拒绝此查询:
selecttimestampadd(“second”,60,current_date())=>您的SQL语法在“second”附近有错误…
。我相信Hibernate会删除引号。也许MSSQL更灵活:)我想你让我走上了正确的轨道。我尝试了双引号和单引号,但都不起作用。但是[本文][1]建议使用
[SECOND]
。由于另一个项目的一些截止日期,我将在明天返回我的hibernate更新分支,并让您知道它是否有效。[1]:
public class ExtendedMySQL5InnoDBDialect extends MySQL5InnoDBDialect {

    public ExtendedMySQL5InnoDBDialect() {
        super();
        //make sure to register it in lowercase as uppercase does not work (took me 4 hours to realize)
        registerKeyword("second");

    }
}