当前位置: 首页 > 知识库问答 >
问题:

即时类型和日期类型

晋坚
2023-03-14
public class UserEntity {
...
    @Basic(optional = false)
    @Column(name = "created", nullable = false, updatable = false)
    @CreatedDate
    private Date created;
...
}
[EL Fine]: sql: 2018-05-02 21:54:25.578--ClientSession(210949780)--Connection(1559972721)--INSERT INTO users (activation_token, avatar_id_in_cloud, avatar_provider, created, email, email_change_token, enabled, entity_version, modified_date, new_email, password, unique_id, username) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [null, null, null, [here created ==> 2018-05-02 21:54:25.279 <== here created, TkM2Gs9Hrd@gmail.com, null, true, 1, B@6f8060ac, null, $2a$12$/MwdBoXwBgHlxnsicVW.w.UWdYo6ulLH87aZtSxhdbBYA.9QacUXy, 74a45e29-c1f8-40dc-ac25-a7196d7870b4, JonkiPro]

但是,根据Java8,我将date类型更改为instant

public class UserEntity {
{
    @Basic(optional = false)
    @Column(name = "created", nullable = false, updatable = false)
    @CreatedDate
    private Instant created;
...
}

现在它自动创建一个表,其中包含longvarbinary创建的列,生成的命令如下所示

[EL Fine]: sql: 2018-05-02 21:54:25.578--ClientSession(210949780)--Connection(1559972721)--INSERT INTO users (activation_token, avatar_id_in_cloud, avatar_provider, created, email, email_change_token, enabled, entity_version, modified_date, new_email, password, unique_id, username) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [null, null, null, [here created ==> B@6f8060ac <== here created, TkM2Gs9Hrd@gmail.com, null, true, 1, B@6f8060ac, null, $2a$12$/MwdBoXwBgHlxnsicVW.w.UWdYo6ulLH87aZtSxhdbBYA.9QacUXy, 74a45e29-c1f8-40dc-ac25-a7196d7870b4, JonkiPro]

代替日期的是字符串B@6f8060ac,在数据库中它已经被写入ACED00057372000D6A6176612E74696D652E536572955D84BA1B2248B20C00007870770D02000000005AEA177110A133C078。日期是怎么回事?我使用的是H2 base和Eclipselink。

共有1个答案

巩阳秋
2023-03-14

JPA似乎不支持instant类型,甚至支持大多数新时间类型的最新版本2.2也不支持。

Hibernate和DataNucleus支持instant类型,它们自动将其映射到时间戳。但对于EclipseLink却不是这样,它将其视为任何其他对象,并使用序列化将其存储到数据库中。

JPA2.2规范只列出了以特殊方式处理的以下类型:

 类似资料:
  • 主要内容:YEAR 类型,TIME 类型,DATE 类型,DATETIME 类型,TIMESTAMP 类型MySQL 中有多处表示日期的数据类型: YEAR、 TIME、 DATE、 DTAETIME、 TIMESTAMP。当只记录年信息的时候,可以只使用 YEAR 类型。 每一个类型都有合法的取值范围,当指定确定不合法的值时,系统将“零”值插入数据库中。 下表中列出了 MySQL 中的日期与时间类型。 类型名称 日期格式 日期范围 存储需求 YEAR YYYY 1901 ~ 2155 1 个字

  • 11.3.1. DATETIME、DATE和TIMESTAMP类型 11.3.2. TIME类型 11.3.3. YEAR类型 11.3.4. Y2K事宜和日期类型 表示时间值的DATE和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个“零”值,当指定不合法的MySQL不能表示的值时使用“零”值。TIMESTAMP类型有专有的自动更新

  • 我对…感到困惑。、和的类型。 > 我在Oracle 11g数据库中有两种数据类型。->, 我用Hibernate映射了这个。->, 它可以像映射到和映射到一样? 以及到和到? 那么我应该在Java代码中使用什么类型呢? Oracle DB/Hibernate/Java代码 > 日期/日期/日期或时间戳?? 时间戳/日期/日期还是时间戳? 时间戳/时间戳/日期还是时间戳? 四种情况都有可能?我很困惑

  • 我有一个带有日期字段的Laravel应用程序。 当我使用“type=text”时 我获取存储在数据库中的值。 当我使用“type=date”时 我得到dd/mm/yyyy和一个下拉列表(datepicker)来为每一个选择一个数字。我本以为dd、mm和yyyy会预先填充我数据库中的日期。 当输入=text工作时,我不喜欢这样,因为使用可以输入该字段中的任何文本。 最好的方法是什么?保留输入=日期并

  • 我使用HTML5输入日期和输入时间进行ionic开发。默认情况下,它绑定为ISO日期字符串并更改为UTC日期时间。在我看来,这似乎是错误的,因为当用户选择日期2016-06-06时,它可能已成为2016-06-07或2016-06-05,具体取决于时区偏移。输入类型=时间的类似情况。 我的意图是使ISO字符串中的日期保留为用户选择的日期,而不是用时区差来抵消它。 类似于输入datetime本地,但

  • 本文向大家介绍Java将日期类型Date时间戳转换为MongoDB的时间类型数据,包括了Java将日期类型Date时间戳转换为MongoDB的时间类型数据的使用技巧和注意事项,需要的朋友参考一下 存了一个时间类型(Date)的数据到mongo数据库中,但是前台显示的是一串数字。继而引发了如下问题: Java里面如何把 时间戳 1477387464495 转换为 2016-10-25 17:24:2