我为HSQLDB定义了自定义方言:
public class CustomHSQLDialect extends HSQLDialect {
public CustomHSQLDialect () {
super();
registerFunction("datediffsec", new SQLFunctionTemplate(
StandardBasicTypes.DOUBLE, "cast((?1 - ?2) AS INTERVAL SECOND)"));
}
}
我定义的配置:
hibernate.dialect=custom.dialect.CustomHSQLDialect
然后我试着在@Formula中使用它:
@Formula("case status when 'ACTIVE' then datediffsec(now(), creationDateTime) when 'CLEARED' then datediffsec(clearedDateTime, creationDateTime) end")
但我发现了一个例外:
原因:java.sql.SQLSyntaxErrorException:用户缺少权限或
找不到对象:DATEDIFFSEC
我做错了什么?
最佳答案
我不知道您是否可以在Hibernate中将此函数创建为SQL表达式。
但假设可以,这个表达式在HSQLDB方面是错误的。
正确的表达式如下:
(?1 - ?2) INTERVAL SECOND
还要注意,HSQLDB中已经有一个TIMESTAMPDIFF函数,它允许您指定秒作为单位。