在休眠中缺少@Temporal注释

Nan*_*ale 26 java hibernate java-ee

如果我们使用该怎么办

@Column(name="birth_date", nullable=false, length=19)
public Date getBirthDate() {
    return this.birthDate;
}
Run Code Online (Sandbox Code Playgroud)

代替

@Temporal(TemporalType.TIMESTAMP)
@Column(name="birth_date", nullable=false, length=19)
public Date getBirthDate() {
    return this.birthDate;
}
Run Code Online (Sandbox Code Playgroud)

如果我们使用没有@Temporal注释的日期列属性,是否有任何副作用?

Tom*_*icz 29

只有我设法找到的文件:

在普通Java API中,未定义时间时间精度.处理时态数据时,您可能希望描述数据库中的预期精度.时态数据可以具有DATE,TIME或TIMESTAMP精度(即实际日期,仅时间或两者).使用@Temporal注释来微调它.

2.2.2.1开始.声明基本属性映射.

可能表示未定义数据库中的实际日期表示,并确保最好直接指定它.

  • +1 - 我也没有发现任何更多的片段,如果没有指定`@Temporal`,它会讨论Hibernate会做什么.就像添加一样 - EclipseLink甚至不允许你****来定义时间精度.我宁愿定义你期望的精确精度. (3认同)

jja*_*man 22

我意识到这个问题已经得到了回答,但我们今天仍在努力解决这个问题,所以我想为未来遇到这个问题的人提供更多的见解.

如果不使用时态注释,则将Oracle 11g与版本11驱动程序一起使用,那么Oracle中的每个日期,时间和时间戳数据类型都将在运行时映射到代码中的时间戳.功能上这很好,但这导致我们严重的性能问题.这是因为我们将DATE类型作为复合主键的一部分.此列是索引的前导列以及我们用于分区的列.当驱动程序尝试在where子句中使用此列保留记录时,Oracle将执行DB中数据从DATE到TIMESTAMP的类型转换.这使得索引无用,性能也很糟糕.

更长的故事,添加这个注释始终是为了准备付出代价.