2009-08-03 29 views
12

No puedo entender cómo es la "práctica estándar" para modificar una clase de dominio después de haber creado automáticamente la tabla de base de datos correspondiente.¿Cómo se modifica una clase de dominio en Grails?

No hay "migración" en Grails, y no hay forma de que pueda encontrar que genere el nuevo SQL que generaría para poder compararlo con la definición de tabla anterior y emitir manualmente su propio comando ALTER TABLE (eso es lo que hago en django).

Acabo de recibir el libro "La guía definitiva de Grails" y no dice nada sobre el tema, y ​​no puedo encontrar nada en el sitio web de Grails.

Respuesta

4

Este es un punto débil y no conozco una buena manera de manejarlo. Lo que hago es crear una copia de la clase de dominio modificada, luego comparar el esquema de SQL de la tabla de la clase de dominio modificada con el generado por la copia de la clase de dominio. Luego debe realizar manualmente las alteraciones que sean necesarias para su tabla original. He descubierto que cosas como las relaciones tienden a cambiar cuando lo hace la clase de dominio, pero cosas como agregar una restricción para forzar que un campo sea un tipo de texto no siempre cambian .......

+0

Además, eliminar una propiedad NUNCA elimina la columna en Grails. Estoy seguro de que esto es por seguridad y porque no querían tener que "averiguar" si podían eliminar una columna de referencia. – billjamesdev

+0

¡Gracias por la respuesta! Eso es bastante malo! Al menos puede volcar el SQL para que pueda comparar lo viejo y lo nuevo. Descubrí que si solo agrega un campo, simplemente "funciona". Si elimina un campo, lo deja en la base de datos. (Lo cual está bien, puede soltarlo más tarde una vez que esté seguro de que no necesita los datos). –

10

Si desea administrar explícitamente el esquema de la base de datos para una aplicación Grails, le sugiero que consulte el Grails Liquibase plugin o el Grails autobase plugin.

+0

¿Alguna idea de cuál de estos complementos es mejor? –

+0

Ambos complementos usan Liquibase para administrar los cambios en la base de datos, por lo que las refactorizaciones disponibles deberían ser similares. Pero no tengo idea del soporte de la comunidad, etc., de ambos complementos. – Ruben

0

tal vez deba pensar en crear un módulo de copia de seguridad/restauración para su aplicación que sea independiente de la base de datos (puede ser serializado a xml o json) - de esa manera, cuando cambie db, también modifica la copia de seguridad/restauración, de tal manera que los viejos datos de dominio se "actualicen" a los datos de dominio.

me gusta como Django pueden hacer esto automáticamente, pero theres más magia en Django que yo no entiendo ...

0

también se puede tratar alternativamente 'griales esquema de exportación' comando .. lo que le daría una salida sql que tiene todos los comandos de creación para tablas y restricciones.

Con eso como referencia, puede crear sus scripts alter. Esa es la mejor disponible actualmente supongo ..

No vamos a saber si usted encuentra una mejor manera ..

Cuestiones relacionadas