Ion*_*nut 15 java datetime jpa-2.0
我正在使用JPA2和EclipseLink实现.我只是想将当前Date保存到DateTime列到MySQL数据库中.
应该持久化的日期对象只是创建:
import java.util.Date
Date currentDate = new Date();
Run Code Online (Sandbox Code Playgroud)
现在currentDate包含确切的日期和时间.此对象持久存在于具有以下列的表中:
@Column(name="DATE_CREATED")
@Temporal(TemporalType.DATE)
Date dateCreated;
Run Code Online (Sandbox Code Playgroud)
将TemporalType有三个常量:
DATE- 这将DB保存在没有任何时间的日期:(2012-02-23 00:00:00)TIME - 这会引发不兼容错误TIMESTAMP- 这将DB保存在没有任何时间的日期:(2012-02-23 00:00:00)数据库列以这种方式创建:
date_opening DATETIME NULL DEFAULT NULL,
对于所有这些选项,我无法保存时间和日期.
Mik*_*unu 16
这应该与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() {
}
}
Run Code Online (Sandbox Code Playgroud)
表定义:
CREATE TABLE `test`.`SOMEENTITY` (
`ID` int(11) NOT NULL,
`DATE_CREATED` datetime DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=innoDB DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
测试:
java.util.Date now = new Date();
SomeEntity se = new SomeEntity(1, now);
em.persist(se);
Run Code Online (Sandbox Code Playgroud)
它按预期工作,DATE_CREATED的时间部分也具有正确的值.如果列之间不匹配不是问题,也许您也可以测试它,并报告结果以及MySQL和库版本.