2011-06-01 13 views
5

estoy ahorrando una entidad en hibernación con una fecha de creación fecha Hibernate no guarde los milisegundos

 @Id 
    @Column(name = "dtcreation") 
    @Type(type="timestamp") 
    private Date creation;
y poner una nueva fecha en este campo:
 entity.setCreation(new Date()); 
    entityDao.persist(entity);
pero cuando se guarda en la base de datos del tiempo de Don 't contiene los milisegundos, pero ponle un 0 si trato de actualizar con una consulta el valor de los milisegundos que funciona ... ¿alguien me puede ayudar?

persisten después de que el método que he un registro con 01/06/2011 15: 00: 00.0 pero si hice un UPDATE puedo cambiar las milésimas de segundo, por lo que el PP es compatible con ella .. la base de datos Informix es

+0

java.util.Date es bastante viejo y horrible. Si puedes, investiga Joda Time en su lugar. Se integra con Hibernate. http://joda-time.sourceforge.net/contrib/hibernate/userguide.html – artbristol

+2

supongo que su problema principal es la columna DB en la que guarda (no la fecha impl, nunca he tenido problemas con java.util. Fecha) – bestsss

+1

Dudo que este sea un problema de hibernación. ¿Cuál es la base de datos subyacente? –

Respuesta

0

Sin su código para probar es difícil para mí responder definitivamente, pero al echarle un vistazo al Javadoc para java.sql.Timestamp, parece que está mezclando tipos con anotar el campo como una marca de tiempo. Cambie el tipo de Java de Fecha a Marca de tiempo y vea si eso resuelve su problema.

8

Esto es consistente con el comportamiento documentado de java.util.Date y java.sql.Timestamp

tiendas java.util.Date abajo a la segunda, y java.sql.Timestamp es una envoltura delgada para acomodar el valor nanosegundo de un valor de marca de tiempo de SQL . Si lees la nota en Timestamp javadoc, establece claramente esta diferencia.

Si no quiere perder sus segundas fracciones, y no quiere investigar bibliotecas de fechas alternativas (por ejemplo, la antes mencionada Hora Joda) necesitará hacer que el campo sea java.sql.Timestamp, y use el valor de milisegundos de la fecha actual para construir el valor inicial

java.util.Date date = new java.util.Date(); 
java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime()); 
entity.setCreation(timestamp); 
Cuestiones relacionadas