在JPA2中处理DateTime

时间:2012-02-23 08:19:34

标签: java datetime jpa-2.0

我正在使用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,

对于所有这些选项,我无法保存时间和日期。

2 个答案:

答案 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