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

Cha*_*nya 85 java hibernate

Hibernate文档具有以下@Temporal注释信息:

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

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

Ank*_*hal 90

必须为持久字段或类型java.util.Date和属性指定此注释java.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;
Run Code Online (Sandbox Code Playgroud)

根据javadocs,

用于在查询方法参数上声明适当的{@code TemporalType}的注释.请注意,此注释只能用于{@link Date}类型的参数,默认情况下TemporalType.DATE

[以上从各种来源收集的信息]

  • 因此,如果您只是使用TemporalType.TIMESTAMP ...是否有任何意义使用此注释?没有它,日期似乎在这方面工作得很好.. (3认同)

小智 33

@Temporal是JPA注释,可用于在数据库表中仅存储TIME(java.sql.Date),DATE(java.sql.Time)或TIMESTAMP(java.sql.Timestamp).通常,当我们在类中声明Date字段并尝试存储它时.它会将时间戳存储在数据库中.

@Temporal
private Date joinedDate;
Run Code Online (Sandbox Code Playgroud)

储值看起来像08-07-17 04:33:35.870000000 PM

如果我们只想在数据库中存储Date,我们可以将此注释与DATE属性一起使用.

@Temporal(TemporalType.DATE)
private Date joinedDate;
Run Code Online (Sandbox Code Playgroud)

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

Date还可以根据需要使用其他一些属性.


小智 10

时态类型是可以在持久状态映射中使用的基于时间的类型集.

支持时间类型的列表包括三个java.sql类型java.sql.Date,java.sql.Time以及java.sql.Timestamp,它包括两种java.util类型java.util.Datejava.util.Calendar.

这些java.sql类型完全没有麻烦.它们的行为与任何其他简单映射类型一样,不需要任何特殊考虑.

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

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


skr*_*ets 7

如果您正在寻找简短的答案:

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

资料来源:Baeldung


Aru*_*aaj 6

我使用 Hibernate 5.2,@Temporal不再需要了。
java.util.datesql.datetime.LocalDate以适当的数据类型作为日期/时间戳存储到数据库中。

  • Java 8 LocalDate 的使用 (3认同)

小智 5

用这个

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

public Calendar getCreateDate() {
    return createDate;
}

public void setCreateDate(Calendar createDate) {
    this.createDate = createDate;
}
Run Code Online (Sandbox Code Playgroud)


Ish*_*Ish 5

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

支持;

@Temporal(TemporalType.TIMESTAMP)
@Temporal(TemporalType.DATE)
@Temporal(TemporalType.TIME)
Run Code Online (Sandbox Code Playgroud)