DateCreated, lastUpdated поля в Grails 2.0
У меня есть приложение, которое использует Grails 1.3.7, которое я только что перенесло в Grails 2.0. Приложение использует автоматические поля dateCreated
и lastUpdated
для управления отметками времени, связанными с созданием и модификацией объектов. После обновления я получаю следующую ошибку:
| Running Grails application
| Error 2012-01-29 22:36:53,504 [Thread-8] ERROR util.JDBCExceptionReporter - ERROR: null value in column "date_created" violates not-null constraint
| Error 2012-01-29 22:36:53,510 [Thread-8] ERROR events.PatchedDefaultFlushEventListener - Could not synchronize database state with session
Комментируя вышеупомянутые поля в моих классах доменов, проблема исчезает.
Были ли устаревшие поля dateCreated
и lastUpdated
в Grails 2.0? Если это так, значит ли это, что я должен написать код для обработки этой функции вручную или код был перемещен в какой-то плагин, например audit-trail плагин?
Ответы
Ответ 1
Хорошо, исправил это вручную, установив для параметра autoTimestamp значение "true" в определениях класса домена:
static mapping = {
autoTimestamp true
}
Я бы предположил, что это свойство не установлено после переноса проекта с Grails 1.3.7 на 2.0.0.
Ответ 2
Grails 2.0 по-прежнему поддерживает автоматические метки времени. Он указан в руководстве (прокрутите вверх немного по этой ссылке).
Однако он специально упоминает:
Если вы помещаете ограничения nullable: false
на dateCreated
или lastUpdated
, ваши экземпляры домена будут отказываться от проверки - возможно, это не то, что вы хотите. Оставьте ограничения для этих свойств, если вы не отключили автоматическую метку времени.
Ответ 3
В Grails 2.0.3 есть ошибка, которая может вызвать эту проблему при использовании Postgres. См. http://jira.grails.org/browse/GRAILS-8988. В этом выпуске говорится, что он будет разрешен при выпуске 2.0.4.