java - No se puede convertir ''0000-00-00 00:00:00'' a TIMESTAMP
localdate hibernate (2)
la definición del campo
/** Date. */
@Column(columnDefinition = "datetime")
private Date date;
setter
public void setDate(final Date date) {
DateFormat dfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
this.date = dfmt.parse(dfmt.format(date));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
¿Alguien tiene idea de cómo convertir "fecha cero" en el valor correcto? Porque tengo un error:
Cannot convert value ''0000-00-00 00:00:00'' from column 13 to TIMESTAMP
E incluso si configuro el campo y el "setter" predeterminado de esta manera:
/** Date. */
@Column
private Date date;
public void setDate(final Date date) {
this.date = date;
}
Todavía tendré el mismo problema ...
No entiendo el punto de tu código, donde formateas y luego vuelves a analizar una fecha. Esto parece una operación idéntica. ¿Tal vez podrías elaborar?
Si desea dar un valor predeterminado a una fecha, podría hacer:
/** Jan 1, 1970 ; first moment in time in Java */
private static final Date NO_DATE = new Date(0L);
private Date date;
public void setDate(final Date date) {
if (date == null) {
this.date = NO_DATE;
} else {
this.date = date;
}
}
Nota: la anotación es opcional, aquí no las agregué.
En este código, puede sustituir lo que quiere con la condición y el valor predeterminado.
También podría agregar un setter similar, que tomaría un argumento String, y verificaría su valor especial "00000 ...". Esto permitiría establecer el campo con una Fecha o con una Cadena.
Voy a adivinar aquí que estás usando MySQL :-) Utiliza "fechas cero" como marcador de posición especial . Desafortunadamente, JDBC no puede manejarlas de manera predeterminada.
La solución es especificar "zeroDateTimeBehavior = convertToNull" como parámetro para su conexión MySQL (ya sea en el origen de la fuente de datos o como una propiedad adicional), por ejemplo:
jdbc:mysql://localhost/myDatabase?zeroDateTimeBehavior=convertToNull
Esto hará que todos esos valores se recuperen como valores NULL.