¿Especificar el orden de los campos en DDL generados a partir de clases GORM?
Pregunta
Uso GORM para generar el DDL de mi base de datos a partir de clases maravillosas. Lo cual es genial. Sin embargo, el orden de los campos en el SQL generado no es el mismo que el orden de los campos en la clase. Por ejemplo, si creo la clase
class Person
{
String firstName
String lastName
String address
String email
}
se genera el siguiente SQL (para MySQL)
CREATE TABLE `test` (
`id` bigint(20) NOT NULL auto_increment,
`version` bigint(20) NOT NULL,
`address` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`first_name` varchar(255) NOT NULL,
`last_name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Los campos se han ordenado en orden alfabético (después de los campos de ID y versión autogenerados). Esto esta bien. en este caso, pero tengo algunas tablas mucho más amplias en las que hay información contextual importante en el orden de los campos.
Aquí está mi pregunta: ¿Cómo le dice a GORM que ordene los campos en SQL en el orden de la declaración en la clase groovy?
Solución
No parece haber una forma de especificar el orden, pero siempre puede crear sus propias tablas como desee y proporcionar asignaciones de nombres en sus clases de dominio. También puede dejar que GORM cree las tablas, y luego recrear las tablas en el orden correcto, y luego apagar el material DDL automático en GORM. Si usa los nombres de campo y tabla que eligió GORM, no necesitará agregar ninguna asignación.
Otros consejos
No estoy absolutamente seguro de esto, pero el cierre de restricciones define el orden de los campos en las vistas, tal vez eso se refleje en los campos de las tablas.
class Person
{
String firstName
String lastName
String address
String email
}
static constraints = {
firstName()
lastName()
address()
email()
}