Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate中@Temporal注释的用途是什么?_Java_Hibernate - Fatal编程技术网

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

Java Hibernate中@Temporal注释的用途是什么?,java,hibernate,Java,Hibernate,Hibernate文档包含以下有关@Temporal注释的信息: 在普通JavaAPI中,时间的时间精度没有定义。 在处理时态数据时,您可能需要描述 数据库中的预期精度。时态数据可以有日期、时间或时间 时间戳精度(即实际日期、仅时间或两者)。使用 @Temporal注释可以对其进行微调 未定义时间的时间精度是什么意思?什么是时间数据及其精度?如何微调?必须为类型为java.util.Date和java.util.Calendar的持久字段或属性指定此注释。只能为这些类型的字段或属性指定 Temp

Hibernate文档包含以下有关
@Temporal
注释的信息:

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


未定义时间的时间精度是什么意思?什么是时间数据及其精度?如何微调?

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

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

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

时态数据是与时间相关的数据。例如,在内容管理系统中,文章的创建日期和上次更新日期是时态数据。在某些情况下,时态数据需要精确性,您希望在数据库表中存储精确的日期/时间或两者(
时间戳

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

根据javadocs

注释以在查询上声明适当的{@code TemporalType} 方法参数。请注意,此批注只能用于 带有默认值
TemporalType.Date的{@link 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.Date
java.sql.Time
java.sql.Timestamp
,它包括两种
java.util
类型
java.util.Date
java.util.Calendar

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

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


有三个枚举的日期、时间和时间戳值来表示每个
java.sql
类型。

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

  • DATE
    java.sql.DATE
  • TIME
    java.sql.TIME
  • 时间戳
    java.sql.TIMESTAMP
  • 通常,当我们在类中声明一个
    Date
    字段并尝试存储它时。
    它将作为时间戳存储在数据库中

    @Temporal
    private Date joinedDate;
    
    上述代码将存储的值看起来像08-07-17 04:33:35.870000000 PM

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

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


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

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

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


    来源:

    我使用Hibernate 5.2,不再需要
    @Temporal


    java.util.date、sql.date、time.LocalDate存储到数据库中,并使用适当的数据类型作为日期/时间戳。

    我们使用@Temporal注释在数据库表中插入日期、时间或两者。使用TemporalType,我们可以在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)
    

    如果您使用Calendar作为实体属性,那么在纯java中,它会打印很多信息,例如,当您想将其保存到数据库时,这些信息是不必要的实体中的日历,通过更改为@Temporal(TemporalType.date)或@Temporal(TemporalType.time),将时间戳存储到数据库或仅存储日期或仅存储时间在您的日历属性上。由于Hibernate 5,您不需要也不应该在新代码中使用
    @Temporal
    。它用于注释
    日期
    日历
    字段,但这些类设计得很糟糕,而且很长
    @Temporal(TemporalType.TIMESTAMP)
    @Temporal(TemporalType.DATE)
    @Temporal(TemporalType.TIME)