2010-01-15 6 views
5

J'ai une application Grails avec une -simplified - classe de domaine qui ressemble à ceci:Grails contraintes de domaine définition

class Capacity { 

static constraints = {    
    month(blank:false, nullable:false) 
    company(blank:false, nullable:false) 
} 


Date month  
Company company 
String note 
... 
} 

La paire mois-société doit être unique. (C'est-à-dire qu'ils devraient être la clé primaire à la DB).

Comment puis-je définir une telle contrainte?

Merci beaucoup à l'avance

Luis

+1

c'est juste Grails, pas Groovy sur Grails. –

Répondre

6

Puisque vous voulez que ce soit un composite primary key dans le DB, vous devrez déclarer que la cartographie:

class Capacity implements Serializable { 
    Date month  
    Company company 
    String note 
    ... 

    static mapping = { 
     id composite:['month', 'company'] 
    } 
} 

qui produit le tableau suivant (MySQL):

CREATE 
    TABLE capacity 
    (
     MONTH DATETIME NOT NULL, 
     company_id bigint NOT NULL, 
     version bigint NOT NULL, 
     note VARCHAR(255) NOT NULL, 
     PRIMARY KEY (MONTH, company_id), 
     INDEX FKFBF514BA69595C7A (company_id) 
    ) 
    ENGINE=MyISAM DEFAULT CHARSET=latin1 
+0

merci! C'est exactement ce que je cherchais – Luixv

+0

Est-ce que cela impose encore l'unicité pendant 'validate()'? Sinon, je pense qu'une combinaison de cette réponse et de Dave est nécessaire. Sinon, vous finirez par obtenir des exceptions de contrainte SQL au lieu d'erreurs de validation Grails. –

+0

@RobHruska Certaines des contraintes utilisent l'état de la base de données pour valider et ne sont pas présentes dans les tests unitaires (avant Grails 2.0) –

Questions connexes