在Hibernate中使用@Temporal注解是什么?

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

在普通的Java API中,没有定义时间的时间精度。 处理时态数据时,可能需要描述数据库中的期望精度。 时间数据可以具有DATE,TIME或TIMESTAMP精度(即实际date,只有时间或两者)。 使用@Temporal注释来微调。

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

必须为持久性字段或java.util.Datejava.util.Calendartypes的属性指定此注释。 它只能被指定为这些types的字段或属性。

Temporal注释可以与Basic注释, Id注释或者ElementCollection注解结合使用(当元素集合值具有这种时间types时。

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

时间数据是与时间有关的数据。 例如,在内容pipe理系统中,文章的创builddate和最后更新date是时间数据。 在某些情况下,时态数据需要精确性,而且您希望将精确的date/时间或两者都存储( TIMESTAMP )到数据库表中。

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

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

根据javadocs,

注释在查询方法参数上声明一个适当的{TemporalType}。 请注意,此注释只能用于具有默认TemporalType.DATE {@link Date}types的参数

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

时态types是可以在持久状态映射中使用的一组基于时间的types。

受支持的时态types列表包括三个java.sqltypesjava.sql.Datejava.sql.Timejava.sql.Timestamp ,它包括两个java.utiltypesjava.util.Datejava.util.Calendarjava.util.Calendar

java.sqltypes完全没有问题。 它们就像任何其他简单的映射types一样,不需要任何特殊的考虑。

这两个java.utiltypes需要额外的元数据,但是要指示在与JDBC驱动程序通信时要使用哪个JDBC java.sqltypes。 这是通过使用@Temporal注释来注释它们并将JDBCtypes指定为TemporalType枚举types的值来完成的。

DATE,TIME和TIMESTAMP有三个枚举值来表示每个java.sqltypes。

@Temporal是一个JPA注释,它可以用来在数据库表中只存储TIME,DATE或TIMESTAMP。 通常当我们在类中声明Date字段并尝试存储它时。 它会将时间戳存储在数据库中。

私人datejoinedDate;

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

如果我们只想在数据库中存储Date,我们可以使用这个注释和DATE属性。

@Temporal(TemporalType.DATE)

私人datejoinedDate;

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

还有一些属于@Temporal的属性,可以根据需要使用。

用这个

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