我刚刚从 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)"
/>
我没有更改 *.xml.hbm 中的任何内容,也没有更改数据库设计。以前我的 endDate 计算得很好,现在我得到了MySQLSyntaxErrorException
:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'this_.SECOND,(this_.quantity*60*60),this_.transactionDate) as formula0_0_ from t' at line 1
问题非常明显this_.SECOND
应该SECOND
。在我看来,Hibernate 能够识别TIMESTAMPADD
作为一个公式,但不是SECOND
作为静态传递的参数,并认为它必须是表中的一列。我不确定如何告诉 hibernate 它应该使用SECOND
as is.
我试过了registerFunction
and registerKeyword
在我的方言上,但没有任何运气,因为这些似乎与 HQL 函数定义相关,而不是公式中使用的本机 SQL。
谁能指出我正确的方向,或者告诉我 Hibernate 在这些版本之间有什么不同以及我如何修复它?
我刚刚升级到 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");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)