2010-05-26 42 views
5

Con una tabla creada utilizando este SQLJava: clases JPA, refactorización de Fecha de Fecha y hora

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

y una clase de entidad definida como tal

@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 lo anterior, puedo usar JPA a lograr el mapeo relacional de objetos Sin embargo, el atributo xDate solo puede almacenar fechas, p. dd/MM/yyyy.

¿Cómo puedo refactorizar lo anterior para almacenar un objeto de fecha completa con un solo campo, es decir, dd/MM/yyyy HH24:mm?

Respuesta

4

¿Ha intentado cambiar el valor de @Temporal por TemporalType.DATETIME? java.util.Date y java.sql.Date, ambos almacenan componentes de fecha y hora, TemporalType controla a qué parte JPA almacena/presta atención; fecha, hora o ambos.

+0

@sblundy: Gracias por la respuesta, ese fue mi instinto también, sin embargo, ¿tengo que cambiar la variable miembro en mi clase de entidad, o la definición de esquema para la tabla? – bguiz

+0

@bguiz: campo no, columna sí. Depende de qué DB esté utilizando, pero DATETIME debería funcionar – sblundy

+0

@sblundy: Estoy usando Toplink/JavaDB – bguiz

7

Si desea almacenar también información del tiempo en el nivel de base de datos, utilice TemporalType.DATETIME:

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

utilizar un tipo TIMESTAMP la columna a nivel de base de datos (y xDate se almacenará como 'yyyy-MM-dd HH:mm:ss.S').

+0

+1 @Pascal Thivent: gracias por la respuesta, ambos tenían razón, pero le doy el cheque a sblundy desde que fue el primero en entrar. – bguiz

+0

@ bguiz Claro, no hay problema! –

+3

Hola. Estoy usando JPA con 'EclipseLink', y' TemporalType' solo tiene la opción 'DATE',' TIME' y 'TIMESTAMP', y no' DATETIME'. ¿Debo usar 'TIMESTAMP' o' TIME'. –

Cuestiones relacionadas