2010-05-26 12 views
5

Con una tabella creata utilizzando questo SQLJava: classi JPA, refactoring da Data a DateTime

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

e una classe di entità definita in questo modo

@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 
    ... 
} 

Con quanto sopra, posso usare APP a realizzare la mappatura relazionale dell'oggetto. Tuttavia, l'attributo xDate può memorizzare solo date, ad es. dd/MM/yyyy.

Come si effettua il refactor per memorizzare un oggetto a data intera utilizzando un solo campo, ad esempio dd/MM/yyyy HH24:mm?

risposta

4

Hai provato a modificare il valore @Temporal in TemporalType.DATETIME? java.util.Date e java.sql.Date entrambi i componenti di data e ora di archiviazione, il TemporalType controlla su quale parte JPA è memorizzata/presta attenzione; data, ora o entrambi.

+0

@sblundy: Grazie per la risposta, questo è stato anche il mio istinto, devo cambiare la variabile membro nella mia classe entità o la definizione dello schema per la tabella? – bguiz

+0

@bguiz: campo no, colonna sì. Dipende dal DB che stai usando, ma DATETIME dovrebbe funzionare – sblundy

+0

@sblundy: Sto usando Toplink/JavaDB – bguiz

7

Se si desidera memorizzare anche informazioni in tempo a livello di database, utilizzare TemporalType.DATETIME:

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

utilizzare un tipo di colonna TIMESTAMP a livello di database (e xDate saranno conservati come 'yyyy-MM-dd HH:mm:ss.S').

+0

+1 @Pascal Thivent: Grazie per la risposta, entrambi avevate ragione, ma sto dando il controllo a sblundy da quando era il primo a. – bguiz

+0

@ bguiz Certo, nessun problema! –

+3

Ciao. Sto usando JPA con 'EclipseLink', e il' TemporalType' ha solo l'opzione 'DATE',' TIME', e 'TIMESTAMP', e non' DATETIME'. Dovrei usare 'TIMESTAMP' o' TIME'. –