Especificar ordem dos campos em DDL gerados a partir de classes GORM?
Pergunta
Eu uso GORM para gerar DDL do meu banco de dados a partir de classes Groovy. O que é ótimo. No entanto, a ordem dos campos no SQL gerado não é o mesmo que a ordem dos campos na classe. Por exemplo, se eu criar a classe
class Person
{
String firstName
String lastName
String address
String email
}
o seguinte SQL é gerada (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
Os campos foram classificados em alfabética ordem (após os campos de identificação e versão geradas automaticamente). Esta é O.K. neste caso, mas eu tenho algumas tabelas muito mais amplas em que há informação contextual importante na ordem dos campos.
Aqui está a minha pergunta: Como você diz GORM para ordenar os campos na SQL na ordem de declaração na classe Groovy?
Solução
Não parece ser uma maneira de especificar a ordem, mas você pode sempre criar seus próprios quadros como você deseja-los e fornecer mapeamentos de nome em suas classes de domínio. Você também pode deixar GORM criar as tabelas, e em seguida, recriar as tabelas na ordem certa, e desligue o material DDL automática no GORM depois disso. Se você usar os nomes de campo e tabela que GORM escolheu, você não vai precisar adicionar os mapeamentos.
Outras dicas
Eu não estou absolutamente certo sobre isso, mas o fechamento restrições define a ordem dos campos nas vistas, talvez que reflete aos campos em tabelas.
class Person
{
String firstName
String lastName
String address
String email
}
static constraints = {
firstName()
lastName()
address()
email()
}