Как работать с нулевыми датами («0000-00-00») в Hibernate? - PullRequest
4 голосов
/ 19 августа 2009

У меня есть таблица MySql, которая имеет поле даты с нулями («0000-00-00») в качестве значения по умолчанию (поле не может быть пустым, я не могу изменить структуру таблицы). Hibernate не любит нулевые даты и выдает исключение во время чтения или сохранения.

Мне удалось заставить его читать записи, установив настройку соединения MySql "zeroDateTimeBehavior = convertToNull", которая преобразует нулевые даты в нулевые при получении записей. Все работает нормально, пока я не попытаюсь сохранить запись с нулевой датой - исключение, что дата не может быть нулевой.

Итак, вопрос - как сохранить запись через Hibernate, чтобы в таблице дата отображалась как нули?

Спасибо.

Ответы [ 2 ]

1 голос
/ 20 августа 2009

Я бы попытался добавить Hibernate Interceptor ( API , Doc ) и попытаться реализовать что-то в методе onSave ().

Может работать следующий код:

static final Date ZERO_DATE = //0000-00-00

public boolean onSave(Object entity,
                  Serializable id,
                  Object[] state,
                  String[] propertyNames,
                  Type[] types)
           throws CallbackException {
    for(int i = 0; i< propertyNames.length; i++) {
        if(propertyNames[i].equals("dateFieldName") && state[i]==null) {
            state[i] = ZERO_DATE;
            return; //or may continue, if there are several such fields.
        }
    }
}
0 голосов
/ 19 февраля 2015

Готовое и рабочее решение для ДАТЫ '0000-00-00' и ВРЕМЕНИ '00: 00: 00 ': Как отобразить MySQL ДАТА' 0000-00-00 'и ВРЕМЯ '00: 00: 00' с Hibernate

Спасибо Престону за код и ChssPly76 за полезные комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...