Прежде чем я продолжу свой ответ, я хочу предупредить, что с Grails 1.2.x (возможно, и 1.3.x) составные уникальные ограничения нарушаются, если любое из значений может быть нулевым. Если вы не можете жить без уникального поведения, вы можете использовать собственную проверку, чтобы добиться цели. См .: https://cvs.codehaus.org/browse/GRAILS-5101
Правильный способ добиться того, чтобы ваш класс домена Metric был уникальным в имени, лице и корпорации.
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'])
}
}
Вам нужно будет вызвать человека и корпорацию в качестве членов вашей модели. Вы можете даже удалить статическую принадлежность, если вам не нужно каскадное удаление.
В приведенном выше примере имя должно быть уникальным лично и корпорации; человек должен быть уникальным по имени и корпорации, и, наконец, корпорация должна быть уникальной по имени и личности.