Java:JPA类,从日期(Date)重构为日期时间(DateTime)

5

使用以下SQL创建的表格:

Create Table X (
    ID varchar(4) Not Null,
    XDATE date
);

并且定义了如下实体类

@Entity
@Table(name = "X")
public class X implements Serializable {
    @Id
    @Basic(optional = false)
    @Column(name = "ID", nullable = false, length = 4)
    private String id;
    @Column(name = "XDATE")
    @Temporal(TemporalType.DATE)
    private Date xDate; //java.util.Date
    ...
}

有了上述内容,我可以使用JPA实现对象关系映射。然而,xDate属性只能存储日期,例如dd/MM/yyyy

如何重构上述内容以使用一个字段存储完整的日期对象,即dd/MM/yyyy HH24:mm

2个回答

7
如果您想在数据库级别上存储时间信息,请使用 TemporalType.DATETIME:
@Column(name = "XDATE")
@Temporal(TemporalType.DATETIME)
private Date xDate; //java.util.Date

在数据库层面使用TIMESTAMP列类型(并且xDate将被存储为'yyyy-MM-dd HH:mm:ss.S')。


+1 @Pascal Thivent:感谢您的回答,你们两个都是对的,但我会把奖励给sblundy,因为他先回答了。 - bguiz
3
嗨,我正在使用EclipseLink的JPA,并且TemporalType只有DATE、TIME和TIMESTAMP这三个选项,没有DATETIME。我应该使用TIMESTAMP还是TIME呢? - Thang Pham
7
奇怪 - 我没有看到DATETIME作为一种选项,我只看到了TemporalType.TIME,TemporalType.DATE和TemporalType.TIMESTAMP。我正在使用JPA2和Eclipselink 2.3.2.v20111125-r10461。 - NBW

4

您是否尝试将@Temporal的值更改为TemporalType.DATETIME?java.util.Date和java.sql.Date都存储日期和时间组件,而TemporalType控制JPA存储/关注哪个部分:日期、时间或两者。


@sblundy:感谢您的回答,这也是我的直觉,但我需要更改实体类中的成员变量还是表的模式定义? - bguiz
@sblundy:我正在使用Toplink/JavaDB。 - bguiz
1
@bguiz:时间戳。这是相关手册页面:http://db.apache.org/derby/docs/dev/ref/ref-single.html#crefsqlj31068 - sblundy
1
@sblundy:java.sql.Date不会存储时间组件。 - mtpettyp
奇怪 - 我没有看到DATETIME选项,我只看到TemporalType.TIME、TemporalType.DATE和TemporalType.TIMESTAMP。我正在使用JPA2 w/Eclipselink 2.3.2.v20111125-r10461。 - NBW
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接