我正在使用JPA2和EclipseLink实现。 我只是想将当前日期保存到MySQL数据库的 DateTime 列中。
只需创建应保留的日期对象:
import java.util.Date
Date currentDate = new Date();
现在currentDate
包含确切的日期和时间。
该对象保存在一个表中,该表包含以下列:
@Column(name="DATE_CREATED")
@Temporal(TemporalType.DATE)
Date dateCreated;
TemporalType
有三个常数:
DATE
- 这会在数据库中保存没有任何时间的日期:(2012-02-23 00:00:00) TIME
- 这会引发不兼容错误TIMESTAMP
- 这会在数据库中保存没有任何时间的日期:(2012-02-23 00:00:00) 以这种方式创建数据库列:
date_opening DATETIME NULL DEFAULT NULL,
对于所有这些选项,我无法保存时间和日期。
答案 0 :(得分:14)
这应该与TemporalType.TIMESTAMP和数据库列类型DATETIME完美配合。也许你正在检查错误列的类型:在映射中你有“DATE_CREATED”和列定义“date_opening”。
你也问过为什么没有TemporalType.DATETIME。原因是TemporalType的值与java.sql中的JDBC时态类型有一对一的映射。[DATE / TIME / TIMESTAMP],最后JPA必须与JDBC一起播放。
我测试了以下代码(env:EclipseLink 2.3.0,Connector / J 5.1.6,MySQL 5.1):
实体/映射:
@Entity
public class SomeEntity {
@Id
private int id;
@Column(name="DATE_CREATED")
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date dateCreated;
public SomeEntity(int id, Date dateCreated) {
this.id = id;
this.dateCreated = dateCreated;
}
public SomeEntity() {
}
}
表格定义:
CREATE TABLE `test`.`SOMEENTITY` (
`ID` int(11) NOT NULL,
`DATE_CREATED` datetime DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=innoDB DEFAULT CHARSET=utf8
测试:
java.util.Date now = new Date();
SomeEntity se = new SomeEntity(1, now);
em.persist(se);
它按预期工作,DATE_CREATED的时间部分也具有正确的值。如果列之间不匹配不是问题,也许您也可以测试它,并报告结果以及MySQL和库版本。
答案 1 :(得分:1)
使用映射:
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date dateCreated;
当你从MySQL检索数据时 - 它给出了类似的东西:
1519621200000