Hibernate @formula不支持将Cast()作为teradata数据库的int

时间:2014-09-05 06:29:51

标签: hibernate formula

我正在使用

@Formula("cast(item_code as \"int\")")

String列投放到int

hibernate正在生成查询

and cast(this_.item_code as this_."int")=? 

如何摆脱alias前面的int

我试过了:

@Formula("cast(item_code as "int")")@Formula("cast(item_code as int)")

但仍然是同样的错误。如何将String投射到int

提前致谢。

2 个答案:

答案 0 :(得分:3)

我已经解决了与您类似的问题。我为我的数据库扩展了hibernate Dialect类。

public class Oracle10gDialectExtended extends Oracle10gDialect {

    public Oracle10gDialectExtended() {
        super();
        /* types for cast: */
        registerKeyword("int");
        // add more reserved words as you need
    }
}

设置' hibernate.dialect'这个新班级的财产。现在你的@Formula会工作。

答案 1 :(得分:0)

尝试:

@Formula("cast(item_code as NUMERIC(1,0))")

问题是您使用的方言无法将int识别为类型(请参见 org.hibernate.dialect.isTypeNameRegistered())。

您可以根据您的方言使用确切的类型(例如PostgreSQL使用int4,而DB2,Ingres和H2使用integer ...),也可以使用NUMERIC(1,0),因为一切括号后跟的是函数或关键字(请参见 org.hibernate.sql.Template.isFunctionOrKeyword())。