Avant de poursuivre avec ma réponse que je veux mise en garde que, avec Grails 1.2.x (1.3.x peut-être aussi) des contraintes uniques composés sont brisées si l'une des valeurs peut être NULL. Si vous ne pouvez pas vivre sans un comportement unique, vous pouvez utiliser une validation personnalisée pour faire l'affaire. Voir: https://cvs.codehaus.org/browse/GRAILS-5101
La bonne façon d'obtenir que votre classe de domaine Metric soit unique au sein du nom, de la personne et de la société.
class Metric {
String name
float value
Person person
Corporation corporation
static belongsTo = [person: Person, corporation: Corporation]
static indexes = {
name()
}
static constraints = {
name(unique:['person', 'corporation'])
person(unique:['name', 'corporation'])
corporation(unique:['name', 'person'])
}
}
Vous devrez appeler une personne et une société en tant que membres de votre modèle. Vous pourriez même laisser tomber l'belongsTo statique si vous ne vous souciez pas du comportement de suppression en cascade.
Dans l'exemple ci-dessus, le nom doit être unique en personne et en corporation; personne doit être unique dans le nom et la société, et enfin la société doit être unique dans le nom et la personne.
assurez-vous que vous le souhaitez. une personne pourrait travailler pour un corp à différents moments avec peut-être des positions différentes. –