2012-01-29 17 views
12

Tengo una aplicación que estaba usando Grails 1.3.7 que acabo de migrar a Grails 2.0. La aplicación hace uso de los campos automáticos dateCreated y lastUpdated para administrar las marcas de tiempo asociadas con la creación y modificación de los objetos. Después de la actualización, me sale el siguiente error: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 

Al comentar los campos arriba mencionados en mis clases de dominio hace que el problema desaparezca.

¿Los campos dateCreated y lastUpdated han quedado obsoletos en Grails 2.0? Si es así, ¿eso significa que tengo que escribir el código para manejar esta funcionalidad manualmente o el código se ha movido a un complemento de algún tipo, como el complemento audit-trail?

Respuesta

17

Ok, lo arregló manualmente ajustando la variable autoTimestamp a "true" en las definiciones de clases de dominio:

static mapping = { 
     autoTimestamp true 
} 

yo supongo que esta propiedad no se establece después de migrar un proyecto de Grails 1.3.7 a 2.0.0.

+0

muchas gracias! Me encontré con un problema porque grails 2.2.0 estaba anulando el valor que estaba configurando en la clase de dominio. Y lo más peligroso es que timeStamp agregado por Grails depende del reloj del sistema. – tusar

+0

He solucionado la anulación automática estableciendo la propiedad autoTimestamp en 'false' – tusar

+0

Esto no funciona en las pruebas de integración – codewandler

6

Grails 2.0 sigue siendo compatible con las marcas de tiempo automáticas. It's listed in the manual (scroll up a bit from this link).

Sin embargo, se menciona específicamente:

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

El enlace que ha publicado va a http: // localhost/~ phil /. ¿Pusiste el enlace equivocado? – srkiNZ84

+0

Ninguno de los campos se menciona en absoluto en las restricciones. Basado en el texto citado, estoy empezando a pensar que de alguna manera he desactivado el "sellado automático de tiempo". ¿De dónde sacaste ese texto? – srkiNZ84

+0

Lo siento, estaba navegando por mi copia sin conexión. El enlace ha sido reparado. El mensaje de advertencia está en la página que he vinculado. Tienes que desplazarte *** UP *** desde el enlace, porque no puedo enlazar directamente. – OverZealous