hibernate @Formula关于'转换(日期)'

时间:2016-01-07 05:17:04

标签: java hibernate

我正在使用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调试日志:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

更新:解决方案发布在Hibernate @formula is not supportinng Cast() as int for teradata database

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