Hibernate Dialects + datediff函数

时间:2011-01-05 16:56:44

标签: java sql hibernate orm datediff

我遇到的问题是mysql中的datediff的语法与hsqldb中的语法不同:

mysql: datediff(date1,date2)
hsqldb: datediff(interval,date1,date2)

hibernate中的方言通常会解决这些问题,但我似乎无法找到为hibernate创建一个约会限制的方法。这是一个真正的麻烦,因为它阻止我使用内存中的hsql数据库进行单元测试,因为我必须在sql语句中“硬编码”datediff的格式。

如果有人就此事提出建议,我们将不胜感激。

1 个答案:

答案 0 :(得分:4)

我想说最简单的解决方案是创建自己的自定义HSQLDB方言,扩展现有的HSQLDB方言。然后,在构造函数中,注册一个函数来处理datediff(date1,date2)以转换为datediff(interval,date1,date2),前提是interval应该是一个静态值。像这样:

registerFunction( "datediff", new SQLFunctionTemplate( StandardBasicTypes.INTEGER, "datediff(interval, ?1, ?2)" ) );