2010-01-15 13 views
5

que tienen una aplicación Grails-simplificado con un - clase de dominio que se parece a esto:Grails restricciones del dominio de definición

class Capacity { 

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


Date month  
Company company 
String note 
... 
} 

La pareja meses de empresa debe ser único. (Es decir, deberían ser clave principal en el DB).

¿Cómo puedo definir tal restricción?

Gracias mucho por adelantado

Luis

+1

es solo Grails, no Groovy en Grails. –

Respuesta

6

Puesto que usted quiere que esto sea un composite primary key en el PP tendrá que declarar que la cartografía:

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

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

que produce la siguiente tabla (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

gracias! Esto es exactamente lo que estaba buscando – Luixv

+0

¿Esto todavía impone la singularidad durante 'validate()'? Si no, creo que se necesita una combinación de esta respuesta y la de Dave. De lo contrario, terminará obteniendo excepciones de restricción de SQL en lugar de errores de validación de Grails. –

+0

@RobHruska Algunas de las restricciones usan el estado de la base de datos para validar y no están allí en pruebas de unidades (antes de Grails 2.0) –

Cuestiones relacionadas