我为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:user缺少权限或 找不到对象:DATEDIFFSEC
我做错了什么?
答案 0 :(得分:0)
我不知道你是否可以在Hibernate中将此函数创建为SQL表达式。
但是假设你可以,就HSQLDB而言,这个表达式是错误的。
正确的表达方式如下:
(?1 - ?2) INTERVAL SECOND
另请注意,HSQLDB中已有TIMESTAMPDIFF函数,允许您将秒数指定为单位。