HSQLDB + EclipseLink + 生成 DDL + DATE JODA TIME = 错误的 TIMESTAMP

Posted

技术标签:

【中文标题】HSQLDB + EclipseLink + 生成 DDL + DATE JODA TIME = 错误的 TIMESTAMP【英文标题】:HSQLDB + EclipseLink + generate DDL + DATE JODA TIME = wrong TIMESTAMP 【发布时间】:2014-06-03 14:58:31 【问题描述】:

我正在使用:

Eclipselink 2.5.0
HSQLDB 2.3
JPA 2.1
Spring 4.0.5

我有这个实体:

@Entity
public class MyEntity 

    ...

    @Temporal(TemporalType.DATE)
    @Convert(converter = MyLocalDateTimeConverter.class)
    private LocalDate date;


当 HSQLDB/Eclipselink 生成 DDL 时,它生成 dabase 字段为:

TIMESTAMP

当我访问(通过选择)这个实体时,我的转换器得到一个 java.sql.Timestamp 而不是 java.sql.Date 并将值转换为 LocalDateTime 而不是 LocalDate

如何强制将字段生成为:

DATE // respecting the Temporal definition

【问题讨论】:

我找到了一种解决方法,根据定义 @Column(columnDefinition = "DATE"),但我需要在不使用 SQL 的情况下解决此问题。 【参考方案1】:

你得到java.sql.TimeStamp的原因很简单,你不仅在DB中有yearmonthday,而且可能还有hourminutesecond

java.sql.Datejava.sql.Timestamp 之间的唯一区别是Timestamp 带有更多信息,例如hour,..

...,也就是说,你得到一个java.sql.Timestamp是正确的。

PS:java.sql.Datejava.sql.Timestamp 都是 java.util.Date.. 的包装器。

【讨论】:

我知道 Timestamp 和 Date 之间的区别,事实是我想/需要在数据库中使用 Date 类型(仅限年、月、日),并且我需要使用 DATE 生成 DDL 和不是时间戳

以上是关于HSQLDB + EclipseLink + 生成 DDL + DATE JODA TIME = 错误的 TIMESTAMP的主要内容,如果未能解决你的问题,请参考以下文章

Eclipselink 2.5 使用 Maven 生成元模型

EclipseLink DDL 生成错误

JPA 使用指南 /Eclipselink/JPA 实体生成器

是否可以使用 EclipseLink 输出生成的 SQL 而无需增加日志的详细程度?

在测试环境中使用 Eclipselink 和 h2 生成序列时出现异常

EclipseLink/JPA 是不是有用于修改生成的 SQL 的插件框架?