【发布时间】:2018-05-02 20:12:38
【问题描述】:
我有一个带有变量 created 类型 Date 的实体
public class UserEntity {
...
@Basic(optional = false)
@Column(name = "created", nullable = false, updatable = false)
@CreatedDate
private Date created;
...
}
表创建了一个类型为TIMESTAMP 的列并将对象正确添加到表中
[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]
但是,根据 Java 8,我将 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 基础和 EclipseLink。
【问题讨论】:
-
同意@lexicore。 Eclipselink 2.7 正式实现了 JPA 2.2(所以 Java 8 日期时间)。 JPA 2.0 (Eclipselink 2.5/2.6) 使用转换器stackoverflow.com/questions/46036493/…
标签: java spring eclipselink