我为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函数,它允许您指定秒作为单位。

10-04 10:45