关于"转换(日期)"的休眠@Formula



我正在使用SqlServer 2012,我的实体是

public class Something {
    private Date rq;
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "rq")
    @Formula("CONVERT(DATE,rq)")
    public Date getRq() {
        return Rq;
    }
    public void setRq(Date rq) {
     this.Rq = rq;
    }
}

休眠调试日志:

Hibernate: 
select
    CONVERT(dnypowergr0_.DATE,
    dnypowergr0_.rq) as formula0_ 
from
    db.dbo.something dnypowergr0_

我想得到"rq"的结果,它可以真正"转换",但正如日志所示,"转换"的第一个参数添加了表的别名,所以这个sql是错误的。

我是否写错了代码或使用了"@Formula"的一部分?

不知道如何使hibernate不在不需要的地方插入表别名。但有一个变通办法。您可以定义一个瞬态属性(类似于convertedRq)并在Java中转换值。在这种情况下,rq将包含rq字段的纯值,convertedRq将被动态计算。

更新:解决方案已发布在此处Hibernate@formula不支持将Cast()作为teradata数据库的int:

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

(c) Sergio M c Figueiredo

最新更新