我正在使用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