나는 다음과 같은 도메인 클래스가 : 사람, 회사와 이름이 고유 그래서Grails의 GORM 제약 질문
class Metric {
String name
float value
static belongsTo = [Person,Corporation]
static indexes = {
name()
}
}
가 어떻게 제약 조건을 추가 할 수 있습니까?
감사합니다.
나는 다음과 같은 도메인 클래스가 : 사람, 회사와 이름이 고유 그래서Grails의 GORM 제약 질문
class Metric {
String name
float value
static belongsTo = [Person,Corporation]
static indexes = {
name()
}
}
가 어떻게 제약 조건을 추가 할 수 있습니까?
감사합니다.
나는 이것이 작동해야한다고 생각한다. 이것을 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)
그러나 다른 회사 또는 그룹에 동일한 이름이 사용되었을 수 있습니다. –
다음은 비슷한 상황에 대한 링크입니다. 약간 다릅니다. 그러나 꽤 가깝습니다. 이 작업을 수행하는 방법에 대한 좋은 아이디어를 줄 수 있습니다. 내가 Grails의 1.2.x 버전 것을주의 할 내 대답 진행하기 전에
http://johnrellis.blogspot.com/2009/09/grails-constraints-across-relationships.html
가치가 널이 될 수있는 경우 화합물 고유 제한 조건이 깨진 (아마도뿐만 아니라 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를 삭제할 수도 있습니다.
위의 예에서 이름은 개인과 회사에서 고유해야합니다. 사람은 이름과 회사에서 고유해야하며, 결국 기업은 이름과 사람이 고유해야합니다.
원하는지 확인하십시오. 한 사람이 다른 위치에서 다른 시간에 회사에서 일할 수 있습니다. –