一尘不染

休眠方言+ datediff函数

hibernate

我有一个问题,就是mysql中datediff的语法与hsqldb中的语法不同:

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

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

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


阅读 244

收藏
2020-06-20

共1个答案

一尘不染

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

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