2012-01-29 2 views
12

У меня есть приложение, которое использует Grails 1.3.7, которое я только что перенес в Grails 2.0. Приложение использует автоматические поляи lastUpdated для управления отметками времени, связанными с созданием и модификацией объектов. После обновления, я получаю следующее сообщение об ошибке:dateCreated, lastUpdated fields in Grails 2.0

| 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?

ответ

17

Ok, установил его вручную, установив переменную autoTimestamp «истина» в определениях класса домена:

static mapping = { 
     autoTimestamp true 
} 

Я бы предположил, что это имущество не устанавливается после переноса проекта с Grails 1.3.7 на 2.0.0.

+0

большое вам спасибо! Я столкнулся с проблемой, потому что grails 2.2.0 переопределял значение, которое я устанавливал в классе домена. И еще более опасно то, что TimeStamp, добавленный Grails, зависит от системы. – tusar

+0

Я исправил автоматическое переопределение, установив свойство autoTimestamp на 'false' – tusar

+0

Это не работает в тестах интеграции – codewandler

6

Grails 2.0 все еще поддерживает автоматические метки времени. It's listed in the manual (scroll up a bit from this link).

Тем не менее, в частности, упоминает:

If you put nullable: false constraints on either dateCreated or lastUpdated , your domain instances will fail validation - probably not what you want. Leave constraints off these properties unless you have disabled automatic timestamping.

+0

Ссылка, которую вы разместили, относится к http: // localhost/~ phil /. Вы ввели неправильную ссылку? – srkiNZ84

+0

Ни одно из полей не упоминается в ограничениях. Основываясь на цитируемом тексте, я начинаю думать, что я каким-то образом отключил «автоматическую метку времени». Откуда вы взяли этот текст? – srkiNZ84

+0

Извините, я просматривал свою автономную копию. Ссылка исправлена. Предупреждающее сообщение находится на странице, с которой я связан. Вам нужно прокрутить *** UP *** из ссылки, потому что я не могу напрямую связать. – OverZealous

3

В Grails 2.0.3 есть ошибка, которая может вызвать эту проблему при использовании Postgres. См. http://jira.grails.org/browse/GRAILS-8988. В этом выпуске говорится, что он будет разрешен при выпуске версии 2.0.4.

Смежные вопросы