Не удается преобразовать '0000-00-00 00: 00: 00' в метку времени
Определение поля
/** Date. */
@Column(columnDefinition = "datetime")
private Date date;
Сеттер
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();
}
}
Есть ли у кого-нибудь идея, как преобразовать "нулевую дату" в правильное значение ? Потому что у меня есть ошибка:
Cannot convert value '0000-00-00 00:00:00' from column 13 to TIMESTAMP
И даже если я установлю поле "default" и сеттер вот так:
/** Date. */
@Column
private Date date;
public void setDate(final Date date) {
this.date = date;
}
У меня все еще будет та же проблема....
2 ответа:
Я собираюсь сделать дикую догадку здесь, что вы используете MySQL : -) он использует "нулевые даты" как специальный заполнитель - к сожалению, JDBC не может обрабатывать их по умолчанию.
Решение состоит в том, чтобы указать "zeroDateTimeBehavior=convertToNull" в качестве параметра для вашего соединения с MySQL (либо в URL источника данных, либо в качестве дополнительного свойства), например:
jdbc:mysql://localhost/myDatabase?zeroDateTimeBehavior=convertToNull
Это приведет к тому, что все такие значения будут возвращены в виде нулей.
Я не понимаю смысла в вашем коде, где вы форматируете, а затем снова анализируете дату. Это похоже на идентичную операцию. Может быть, вы могли бы уточнить?
Если вы хотите задать дату по умолчанию, вы можете сделать:
Примечание: аннотации являются опциональными, здесь я их не добавлял./** 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; } }
В этом коде вы можете подставить то, что хотите, в условие и в значение по умолчанию.
Вы также можете добавить аналогичный сеттер, который будет принимать строку аргумент, и проверка для вашего специального " 00000..." значение. Это позволит задать в поле либо дату, либо строку.