2010-05-26 43 views
5

與表使用創造了這個SQL的Java:JPA類,重構從日期爲DateTime

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

回答

4

您是否嘗試將@Temporal的值更改爲TemporalType.DATETIME? java.util.Date和java.sql.Date都存儲日期和時間組件,TemporalType控制JPA存儲/關注哪個部分;日期,時間或兩者。

+0

@sblundy:謝謝你的回答,那是我的直覺,但是,我是否需要更改實體類中的成員變量或表的模式定義? – bguiz 2010-05-26 14:26:15

+0

@bguiz:字段號,列是。這取決於你正在使用哪個數據庫,但DATETIME應該工作 – sblundy 2010-05-26 14:31:56

+0

@sblundy:我使用Toplink/JavaDB – bguiz 2010-05-26 14:40:17

7

如果你也想存儲在數據庫級的時間信息,使用TemporalType.DATETIME

@Column(name = "XDATE") 
@Temporal(TemporalType.DATETIME) 
private Date xDate; //java.util.Date 

在數據庫級別使用TIMESTAMP列型(和xDate將被存儲爲'yyyy-MM-dd HH:mm:ss.S')。

+0

+1 @Pascal Thivent:謝謝你的回答,你們兩個都是對的,但是我自從他第一次進入sblundy之後給他支票。 – bguiz 2010-06-02 07:19:49

+0

@ bguiz當然,沒問題! – 2010-06-02 12:24:23

+3

嗨。我正在使用帶有EclipseLink的JPA,而'TemporalType'只有'DATE','TIME'和'TIMESTAMP'選項,而不是'DATETIME'。我應該使用'TIMESTAMP'還是'TIME'。 – 2011-06-23 13:31:39