在 Hibernate 中@颞注释的用途是什么?

Hibernate 文档中有以下关于 @Temporal注释的信息:

在普通 JavaAPI 中,没有定义时间的时间精度。 在处理时态数据时,您可能需要描述 数据库中预期的精度。时态数据可以有 DATE、 TIME 或 时间戳的精确度(即实际日期,只有时间,或两者兼有) @ 时态注释来微调。

什么是 temporal precision of time is not defined意味着什么? 什么是 temporal数据及其精度? 它如何微调?

274385 次浏览

必须为 java.util.Datejava.util.Calendar类型的持久字段或属性指定此注释。只能为这些类型的字段或属性指定。

Temporal注释可以与 Basic注释、 Id注释或 ElementCollection注释(当元素集合值属于这种时态类型时)一起使用。

在普通 JavaAPI 中,没有定义时间的时间精度。在处理时态数据时,您可能希望描述数据库中的预期精度。时态数据可以具有 DATE、 TIME 或 TIMESTAMP 精度(即,实际日期、只有时间或两者)。使用 @Temporal注释对其进行微调。

时态数据是与时间有关的数据。例如,在内容管理系统中,文章的创建日期和最后更新日期是时间数据。在某些情况下,时态数据需要精确度,因此需要在数据库表中存储精确的日期/时间或两者(TIMESTAMP)。

在核心 JavaAPI 中没有指定时间精度。@Temporal是一个 JPA注释,它在时间戳和 java.util.Date之间来回转换。它还将 time-stamp转换为时间。例如,在下面的代码片段中,@Temporal(TemporalType.DATE) < em > 删除时间值,只保留日期

@Temporal(TemporalType.DATE)
private java.util.Date creationDate;

根据 javadocs 的说法,

注释在查询上声明适当的{@code 颞 alType } 注意,此注释只能在 类型为{@link Date }且 < strong > default TemporalType.DATE的参数

[以上资料来源不同]

用这个

@Temporal(TemporalType.TIMESTAMP)
@Column(name="create_date")
private Calendar createDate;


public Calendar getCreateDate() {
return createDate;
}


public void setCreateDate(Calendar createDate) {
this.createDate = createDate;
}

时态类型是一组基于时间的类型,可用于持久状态映射。

支持的时态类型列表包括三种 java.sql类型 java.sql.Datejava.sql.Timejava.sql.Timestamp,它还包括两种 java.util类型 java.util.Datejava.util.Calendar

java.sql类型是完全免费的。它们的作用就像任何其他简单映射类型一样,不需要任何特殊考虑。

但是,这两种 java.util类型需要额外的元数据来指示在与 JDBC 驱动程序通信时使用哪种 JDBC java.sql类型。这是通过使用 @Temporal注释对它们进行注释并将 JDBC 类型指定为 TemporalType枚举类型的值来完成的。

有三个枚举值 DATE、 TIME 和 TIMESTAMP 来表示每种 java.sql类型。

@Temporal 是一个 JPA 注释,可用于存储在下列列项的数据库表中:

  1. 日期 (java.sql.Date)
  2. TIME (java.sql.Time)
  3. TIMESTAMP (java.sql.Timestamp)

通常,当我们在类中声明一个 Date字段并试图存储它时。
它将以 时间戳的形式存储在数据库中。

@Temporal
private Date joinedDate;

以上代码将存储值看起来像 08-07-1704:33:35.87000000 PM

如果我们只想在数据库中存储 日期,
我们可以使用/定义 TemporalType

@Temporal(TemporalType.DATE)
private Date joinedDate;

这一次,它将在数据库中存储 08-07-17

还有一些其他属性以及 @Temporal可以根据需求使用。

如果你想听简短的回答:

在使用 java.util 的情况下。日期,Java 并不真正知道如何直接与 SQL 类型相关。这时 @Temporal开始发挥作用。它用于指定所需的 SQL 类型。

资料来源: Baeldung

我使用 Hibernate 5.2,不再需要 @Temporal了。
Date Sql 约会本地日期被存储到 DB 中,并使用适当的数据类型(Date/time 戳)。

我们使用@颞注释在数据库表中插入日期、时间或两者。使用颞类型,我们可以插入数据、时间或同时插入 int 表。

@Temporal(TemporalType.DATE) // insert date
@Temporal(TemporalType.TIME) // insert time
@Temporal(TemporalType.TIMESTAMP) // insert  both time and date.

简单地说,@Temporal是一个 Hibernate JPA 注释,它只能在 java.util. Date 或 java.util. Calendar 上设置。 它有助于将日期和时间值从 Java 对象转换为兼容的数据库类型,并将其检索回应用程序。

支架;

@Temporal(TemporalType.TIMESTAMP)
@Temporal(TemporalType.DATE)
@Temporal(TemporalType.TIME)