【问题标题】:Using custom dialect function in hibernate @Formula在休眠@Formula 中使用自定义方言函数
【发布时间】:2014-04-27 09:32:03
【问题描述】:

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

我做错了什么?

【问题讨论】:

    标签: java hibernate postgresql hsqldb


    【解决方案1】:

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

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

    正确的表达方式应该是:

     (?1 - ?2) INTERVAL SECOND
    

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

    【讨论】:

    • (?1 - ?2) SECOND 对我有用(作为我帖子中的表达),但麻烦不同。 Hibernate 解析器错过了注册的自定义函数
    猜你喜欢
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    相关资源
    最近更新 更多