首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hibernate中缺少@Temporal注释

hibernate中缺少@Temporal注释
EN

Stack Overflow用户
提问于 2011-12-12 19:58:28
回答 2查看 17.9K关注 0票数 26

如果我们使用

代码语言:javascript
复制
@Column(name="birth_date", nullable=false, length=19)
public Date getBirthDate() {
    return this.birthDate;
}

而不是

代码语言:javascript
复制
@Temporal(TemporalType.TIMESTAMP)
@Column(name="birth_date", nullable=false, length=19)
public Date getBirthDate() {
    return this.birthDate;
}

如果我们使用不带@Temporal注释的date列属性,会有什么副作用吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-12 20:18:31

我只找到了一份文档:

在纯Java中,时间的时间精度未在中定义。在处理时态数据时,您可能希望在数据库中描述期望的精度。时态数据可以有日期、时间或时间戳精度(即实际日期、只有时间或两者都有)。使用@Temporal注释对其进行微调。

来自2.2.2.1. Declaring basic property mappings

这可能表示未定义数据库中的实际日期表示形式,因此最好直接指定它。

票数 29
EN

Stack Overflow用户

发布于 2012-07-14 08:08:10

我意识到这个问题已经得到了回答,但我们今天遇到了这个问题,所以我想给那些偶然发现这个问题的未来的人提供一些更多的见解。

将Oracle 11g与版本11驱动程序配合使用如果不使用时态注释,则Oracle中的每个日期、时间和时间戳数据类型都会在运行时映射到代码中的时间戳。在功能上这是很好的,但是这给我们带来了严重的性能问题。这是因为我们有一个DATE类型作为复合主键的一部分。该列是索引的前导列,也是我们用于分区的列。当驱动程序试图持久化where子句中包含该列的记录时,Oracle将对数据库中的数据执行从DATE到TIMESTAMP的类型转换。这使得索引变得无用,性能非常糟糕。

说来话长,总是添加这个注解,以免你准备付出代价。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8473952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档