2009-01-30 6 views
2

J'utilise GORM pour générer le DDL de ma base de données à partir de classes groovy. Qui est genial. Cependant, l'ordre des champs dans le SQL généré n'est pas le même que l'ordre des champs dans la classe. Par exemple, si je crée la classeSpécifiez l'ordre des champs dans DDL générés à partir des classes GORM?

class Person 
{ 
    String firstName 
    String lastName 
    String address 
    String email 
} 

SQL suivante est générée (pour 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 

Les champs ont été classés dans ordre alphabétique (après les id autogénérées et champs Version) . C'est acceptable. dans ce cas, mais j'ai des tables beaucoup plus larges dans lesquelles il y a des informations contextuelles importantes dans l'ordre des champs.

Voici ma question: Comment dites-vous à GORM de commander les champs dans SQL dans l'ordre de déclaration dans la classe groovy?

Répondre

1

Il ne semble pas être un moyen de spécifier l'ordre, mais vous pouvez toujours créer vos propres tables que vous voulez et fournir des correspondances de nom dans vos classes de domaine. Vous pouvez également laisser GORM créer les tables, puis recréer les tables dans le bon ordre et désactiver ensuite les éléments DDL automatiques dans GORM. Si vous utilisez les noms de champs et de tables que GORM a choisis, vous n'aurez besoin d'ajouter aucun mappage.

+0

Merci John. C'est l'approche que je suis en train de prendre. C'est dommage qu'il n'y ait pas de façon plus groovy de le faire. –

2

Je ne suis pas absolument sûr à ce sujet, mais la fermeture des contraintes définit l'ordre des champs dans les vues, peut-être que cela reflète les champs sur les tables.

class Person 
{ 
    String firstName 
    String lastName 
    String address 
    String email 
} 

static constraints = { 
    firstName() 
    lastName() 
    address() 
    email() 
} 
+0

Merci pour la suggestion! Je viens de le tester et malheureusement il ne semble pas changer l'ordre des champs générés dans le DDL. –

Questions connexes