如果我们使用
@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注释的date列属性,会有什么副作用吗?
发布于 2011-12-12 20:18:31
我只找到了一份文档:
在纯Java中,时间的时间精度未在中定义。在处理时态数据时,您可能希望在数据库中描述期望的精度。时态数据可以有日期、时间或时间戳精度(即实际日期、只有时间或两者都有)。使用@Temporal注释对其进行微调。
来自2.2.2.1. Declaring basic property mappings。
这可能表示未定义数据库中的实际日期表示形式,因此最好直接指定它。
发布于 2012-07-14 08:08:10
我意识到这个问题已经得到了回答,但我们今天遇到了这个问题,所以我想给那些偶然发现这个问题的未来的人提供一些更多的见解。
将Oracle 11g与版本11驱动程序配合使用如果不使用时态注释,则Oracle中的每个日期、时间和时间戳数据类型都会在运行时映射到代码中的时间戳。在功能上这是很好的,但是这给我们带来了严重的性能问题。这是因为我们有一个DATE类型作为复合主键的一部分。该列是索引的前导列,也是我们用于分区的列。当驱动程序试图持久化where子句中包含该列的记录时,Oracle将对数据库中的数据执行从DATE到TIMESTAMP的类型转换。这使得索引变得无用,性能非常糟糕。
说来话长,总是添加这个注解,以免你准备付出代价。
https://stackoverflow.com/questions/8473952
复制相似问题