Подтвердить что ты не робот

Невозможно преобразовать '0000-00-00 00:00:00' в TIMESTAMP

определение поля

 /** 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;   
  }

У меня будет такая же проблема...

4b9b3361

Ответ 1

Я собираюсь предположить, что вы используете MySQL:-) Он использует "нулевые даты" в качестве специального заполнитель - к сожалению, JDBC не может справиться с ними по умолчанию.

Решение состоит в том, чтобы указать "zeroDateTimeBehavior = convertToNull" в качестве параметра вашего соединения с MySQL (либо в URL-адресе источника данных, либо как дополнительное свойство), например:

jdbc:mysql://localhost/myDatabase?zeroDateTimeBehavior=convertToNull

Это приведет к тому, что все такие значения будут получены как NULL.

Ответ 2

Я не понимаю смысла в вашем коде, где вы форматируете, затем снова анализируете дату. Это похоже на идентичную операцию. Может быть, вы могли бы разработать?


Если вы хотите указать значение по умолчанию для даты, вы можете сделать:

/** 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;
     }
}

Примечание: аннотация является необязательной, здесь я их не добавлял.

В этом коде вы можете подставить то, что вы хотите, и значение по умолчанию.

Вы также можете добавить аналогичный сеттер, который будет принимать аргумент String и проверить ваше специальное значение "00000...". Это позволит установить поле либо с датой, либо с помощью строки.