2012-01-29 18 views
12

Ho un'applicazione che utilizza Grails 1.3.7 che ho appena migrato a Grails 2.0. L'applicazione utilizza i campi automatici dateCreated e lastUpdated per gestire i timestamp associati alla creazione e alla modifica degli oggetti. Dopo l'aggiornamento, ottengo il seguente errore: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 

Commentando i campi di cui sopra nelle mie classi di dominio rende il problema andare via.

I campi dateCreated e lastUpdated sono stati deprecati in Grails 2.0? Se è così, vuol dire che devo scrivere il codice per gestire questa funzionalità manualmente o il codice è stato spostato su un plugin di qualche tipo, come il plugin audit-trail?

risposta

17

Ok, risolto impostando manualmente la variabile autoTimestamp su "true" nelle definizioni delle classi di dominio:

static mapping = { 
     autoTimestamp true 
} 

Direi che questa proprietà non è impostato dopo la migrazione di un progetto da Grails 1.3.7 a 2.0.0.

+0

grazie mille! Ho riscontrato un problema perché Grails 2.2.0 stava ignorando il valore che stavo impostando nella classe di dominio. E la cosa più pericolosa è il timeStamp aggiunto da Grails dipende dall'orologio di sistema. – tusar

+0

Ho corretto l'override automatico impostando la proprietà autoTimestamp su 'false' – tusar

+0

Questo non funziona nei test di integrazione – codewandler

6

Grails 2.0 supporta ancora i timestamp automatici. It's listed in the manual (scroll up a bit from this link).

Tuttavia, cita espressamente:

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

Il link che hai postato va a http: // localhost/~ phil /. Hai inserito il link sbagliato? – srkiNZ84

+0

Nessuno dei campi è menzionato affatto nei vincoli. Sulla base del testo citato sto iniziando a pensare che potrei avere in qualche modo disabilitato il "timestamp automatico". Da dove hai preso quel testo? – srkiNZ84

+0

Mi dispiace, stavo dando un'occhiata alla mia copia offline. Il collegamento è stato corretto Il messaggio di avviso è sulla pagina che ho collegato. Devi scorrere *** UP *** dal link, perché non riesco a collegarmi direttamente. – OverZealous

3

C'è un bug in Grails 2.0.3 che può causare questo problema quando si utilizza Postgres. Vedi http://jira.grails.org/browse/GRAILS-8988. Il problema dice che verrà risolto quando verrà rilasciato 2.0.4.

Problemi correlati