java hibernate date hql

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.