【问题标题】:HSQLDB + EclipseLink + generate DDL + DATE JODA TIME = wrong TIMESTAMPHSQLDB + EclipseLink + 生成 DDL + DATE JODA TIME = 错误的 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 的情况下解决此问题。

标签: spring eclipselink jodatime hsqldb jpa-2.1


【解决方案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 和不是时间戳。
猜你喜欢
  • 1970-01-01
  • 2014-08-22
  • 2011-08-24
  • 1970-01-01
  • 2020-12-25
  • 2020-12-25
  • 2020-02-11
  • 1970-01-01
  • 2011-10-05
相关资源
最近更新 更多