2010-06-04 7 views
1

나는 다음과 같은 도메인 클래스가 : 사람, 회사와 이름이 고유 그래서Grails의 GORM 제약 질문

class Metric { 

    String name 
    float value 

    static belongsTo = [Person,Corporation] 

    static indexes = { 
    name() 
} 
} 

가 어떻게 제약 조건을 추가 할 수 있습니까?

감사합니다.

+0

원하는지 확인하십시오. 한 사람이 다른 위치에서 다른 시간에 회사에서 일할 수 있습니다. –

답변

2

나는 이것이 작동해야한다고 생각한다. 이것을 Metric에 추가한다. 분명히 원하는 경우 nullables를 무시할 수 있습니다.

static constraints = { 
     name(blank:false) 
     corporation(nullable:false) 
     person(nullable:false) 

     name(unique:['corporation','person']) 
    } 

이 통합 테스트를 통해 테스트 한 결과 작동하는 것으로 보입니다.

def newCorp = new Corporation(name:"Corporation1") 
newCorp.save() 
def newPerson = new Person(name:"Person1") 
newPerson.save() 

def newMetric = new Metric(name:"Metric1",corporation:newCorp,person:newPerson) 
newMetric.save() 

newMetric = new Metric(name:"Metric1",corporation:newCorp,person:newPerson) 
newMetric.save() 

assertTrue (Metric.list().size == 1) 
+0

그러나 다른 회사 또는 그룹에 동일한 이름이 사용되었을 수 있습니다. –

0

가치가 널이 될 수있는 경우 화합물 고유 제한 조건이 깨진 (아마도뿐만 아니라 1.3.x 버전). 고유 한 동작없이 살 수 없다면 사용자 지정 유효성 검사를 사용하여 트릭을 수행 할 수 있습니다. 참조 : https://cvs.codehaus.org/browse/GRAILS-5101

메트릭 도메인 클래스를 달성하는 올바른 방법은 이름, 사람 및 법인 내에 unique이되어야합니다.

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']) 
    } 
} 

모델의 구성원으로 개인 및 법인을 호출해야합니다. 계단식 삭제 동작에 신경 쓰지 않으면 정적 belongsTo를 삭제할 수도 있습니다.

위의 예에서 이름은 개인과 회사에서 고유해야합니다. 사람은 이름과 회사에서 고유해야하며, 결국 기업은 이름과 사람이 고유해야합니다.