在hibernate @Formula中使用自定义方言功能

时间:2014-03-20 13:36:00

标签: java hibernate postgresql hsqldb

我为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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我不知道你是否可以在Hibernate中将此函数创建为SQL表达式。

但是假设你可以,就HSQLDB而言,这个表达式是错误的。

正确的表达方式如下:

 (?1 - ?2) INTERVAL SECOND

另请注意,HSQLDB中已有TIMESTAMPDIFF函数,允许您将秒数指定为单位。