JPA和SQLite3 - 错误的日期

时间:2012-02-16 22:09:03

标签: sqlite jpa eclipselink

我的实体类中的日期字段定义如下:

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_EXECUTED")
private Date lastExecuted = new Date();

但是,当它通过JPA持久保存到SQLite3数据库时,数据库值始终为“1899-12-30”。你有什么想法吗?

在数据库中,该字段定义为DATETIME

我尝试过使用SqliteJDBC和Xerial SQLite JDBC。

更新:在EclipseLink JPA中打开SQL调试并关闭参数绑定后,看起来插入的日期如下:

insert into run (last_executed) values ('{ts ''2012-02-17 10:34:58.013''}');

如果在SQLite中手动插入,则给出日期'1899-12-30'。

当然,任何变通办法都会受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

日期在插入中看起来正确,所以似乎是某种SQLite问题。您通常应该使用参数绑定,似乎SQLite确实允许绑定时间戳,或忽略DATE部分。如果您使用TemporalType.DATE?

,该怎么办?

也许尝试使用原始JDBC来确切了解JDBC驱动程序的问题是什么?

对于打印语法,如果不使用参数绑定,您可以通过创建自己的DatabasePlatform子类来自定义它。您打印的语法是标准的JDBC时间戳语法。

答案 1 :(得分:0)

你能验证它是java.util.Date而不是java.sql.Date吗?

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_EXECUTED")
private java.util.Date lastExecuted = new Date();

如果重新打开参数绑定,调试输出会是什么样的?

答案 2 :(得分:-1)

使用 smalldatetime 解决问题~~~试试吧。