2010-01-15 11 views
5

Ich habe eine Grails-Anwendung mit einer -Vereinfachte - Domain-Klasse, die wie folgt aussieht:Grails Domain Constraints Definition

class Capacity { 

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


Date month  
Company company 
String note 
... 
} 

Das Paar Monat-Unternehmen muss eindeutig sein. (Das heißt, sie sollten Primärschlüssel in der DB sein).

Wie kann ich eine solche Einschränkung definieren?

Vielen Dank im Voraus

Luis

+1

ist es nur Grails, nicht Groovy auf Grails. –

Antwort

6

Da wollen Sie dies ein composite primary key in der DB sein werden Sie, dass die Abbildung erklären müssen:

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

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

Welche der folgenden Tabelle Erzeugt (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

danke! Genau das habe ich gesucht – Luixv

+0

Erzwingt dies noch die Eindeutigkeit während 'validate()'? Wenn nicht, denke ich, dass eine Kombination dieser Antwort und Daves benötigt wird. Andernfalls erhalten Sie SQL-Constraint-Exceptions anstelle von Graals-Validierungsfehlern. –

+0

@RobHruska Einige der Einschränkungen verwenden den Status der Datenbank zur Validierung und sind nicht im Komponententest vorhanden (vor Grails 2.0) –

Verwandte Themen