我的实体类中的日期字段定义如下:
@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'。
当然,任何变通办法都会受到高度赞赏。
答案 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 解决问题~~~试试吧。