[英]Absence of @Temporal annotation in hibernate
如果我们使用该怎么办
@Column(name="birth_date", nullable=false, length=19)
public Date getBirthDate() {
return this.birthDate;
}
代替
@Temporal(TemporalType.TIMESTAMP)
@Column(name="birth_date", nullable=false, length=19)
public Date getBirthDate() {
return this.birthDate;
}
如果我们在没有@Temporal
注释的情况下使用日期列属性,是否有任何副作用?
只有我设法找到的文件:
在普通Java API中, 未定义时间的时间精度 。 处理时态数据时,您可能希望描述数据库中的预期精度。 时态数据可以具有DATE,TIME或TIMESTAMP精度(即实际日期,仅时间或两者)。 使用@Temporal注释来微调它。
这可能表示未定义数据库中的实际日期表示,并确保最好直接指定它。
我意识到这个问题已经得到了回答,但我们今天仍在努力解决这个问题,所以我想为未来遇到这个问题的人提供更多的见解。
如果不使用时态注释,则将Oracle 11g与版本11驱动程序一起使用,那么Oracle中的每个日期,时间和时间戳数据类型都将在运行时映射到代码中的时间戳。 功能上这很好,但这导致我们严重的性能问题。 这是因为我们将DATE类型作为复合主键的一部分。 此列是索引的前导列以及我们用于分区的列。 当驱动程序尝试在where子句中使用此列保留记录时,Oracle将执行DB中数据从DATE到TIMESTAMP的类型转换。 这使得索引无用,性能也很糟糕。
更长的故事,添加这个注释始终是为了准备付出代价。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.