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中有year
、month
和day
,而且可能还有hour
、minute
和second
。
java.sql.Date
和java.sql.Timestamp
之间的唯一区别是Timestamp
带有更多信息,例如hour
,..
...,也就是说,你得到一个java.sql.Timestamp
是正确的。
PS:java.sql.Date
和 java.sql.Timestamp
都是 java.util.Date
.. 的包装器。
【讨论】:
我知道 Timestamp 和 Date 之间的区别,事实是我想/需要在数据库中使用 Date 类型(仅限年、月、日),并且我需要使用 DATE 生成 DDL 和不是时间戳。以上是关于HSQLDB + EclipseLink + 生成 DDL + DATE JODA TIME = 错误的 TIMESTAMP的主要内容,如果未能解决你的问题,请参考以下文章
Eclipselink 2.5 使用 Maven 生成元模型
JPA 使用指南 /Eclipselink/JPA 实体生成器
是否可以使用 EclipseLink 输出生成的 SQL 而无需增加日志的详细程度?