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



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

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

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

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

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

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

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

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

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

根据javadocs,

注释在查询时声明一个适当的{@code TemporalType}方法参数。注意,此注释只能用于参数类型{@链接日期}与默认TemporalType.DATE

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

  1. date ( java.sql.Date)
  2. time ( java.sql.Time)
  3. 时间戳 ( java.sql.Timestamp)

通常当我们在类中声明Date字段并试图存储它时。
它将在数据库中存储为TIMESTAMP

@Temporal
private Date joinedDate;

上面的代码将存储值看起来像08-07-17 04:33:35.870000000 PM

如果我们想在数据库中只存储DATE
我们可以使用/define TemporalType

@Temporal(TemporalType.DATE)
private Date joinedDate;
这一次,它将把08-07-17存储在数据库 中

除了@Temporal之外,还可以根据需要使用其他一些属性

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

支持的时间类型包括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类型。

如果你在寻找简短的答案:

在使用java.util。到目前为止,Java并不真正知道如何直接关联SQL类型。这就是@Temporal发挥作用的时候。它用于指定所需的SQL类型。

来源:Baeldung

我使用Hibernate 5.2,不再需要@Temporal了。
java.util。, sql。, 时间。LocalDate以适当的数据类型存储在DB中,如Date/timestamp。

使用

@Temporal(TemporalType.TIMESTAMP)
@Column(name="create_date")
private Calendar createDate;
public Calendar getCreateDate() {
    return createDate;
}
public void setCreateDate(Calendar createDate) {
    this.createDate = createDate;
}

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

支持;

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

我们使用@Temporal注释在数据库表中插入日期、时间或两者。通过使用TemporalType,我们可以将数据、时间或两者同时插入到表中。

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

最新更新