Hibernate的方言+ DATEDIFF函数

问题描述:

我有一个问题,即在mysql的DATEDIFF语法不同于在HSQLDB:Hibernate的方言+ DATEDIFF函数

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

休眠的方言通常解决这些问题,但是我好像不能够找到一种为休眠创建时间限制的方法。这是一个真正的麻烦,因为它阻止了我使用内存中的hsql数据库进行单元测试,因为我必须在sql语句中“硬编码”datediff的格式。

如果任何人有关于此事的建议,将不胜感激。

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

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