我正在使用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'的一部分?
答案 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