我将JPA2与EclipseLink实现结合使用。我只是试图将当前日期保存到一个DateTime列中,然后保存到MySQL数据库中。
应该持久化的date对象只需创建:
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 -这引发了一个不兼容的errorTIMESTAMP -这在数据库中保存日期没有任何时间:(2012-02-23 00:00:00)数据库列是这样创建的:
date_opening DATETIME NULL DEFAULT NULL,
对于所有这些选项,我都未能节省时间和日期。
发布于 2012-02-23 15:57:57
这应该与TemporalType.TIMESTAMP和数据库列类型DATETIME完美地工作。也许您正在检查类型是否有错误的列:在映射中有"DATE_CREATED“和列定义中的"date_opening”。
您还问了为什么没有TemporalType.DATETIME,原因是JPA的值在java.sql.DATE/TIME/时间戳中有到JDBC时态类型的一对一映射,最后TemporalType必须一起使用JDBC。
我用以下代码(env: EclipseLink 2.3.0,Connector/J5.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和库版本。
发布于 2018-02-28 22:00:26
在地图上:
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date dateCreated;当您从MySQL检索数据时-它提供了如下内容:
1519621200000
https://stackoverflow.com/questions/9409342
复制相似问题