2011-10-07 5 views
6

사용자 간 게시물/토론을 업그레이드하여 티켓이 될 수있는 시스템을 설계하고 있습니다. 특정 장소에서 나는 일대일 선택적 관계를 만들려고 노력하고 있지만 특정 문제에 직면하고 있습니다. 스포트라이트에있는 엔티티의 응축 버전이 아래에 나와 있습니다.Grails/GORM : 일대일 선택적 관계 만들기

규칙 : 필요한 경우

  1. 게시물이 티켓이 될 수 있습니다. (선택)
  2. 티켓에는 반드시 포스트가 있어야합니다. (필수)

Post.groovy

class Post { 

     String title 
     String description 
     String postedBy 

     Ticket ticket 

     static hasMany = [comments: Comment] 

    static constraints = { 
     title(blank:false) 
     description(blank:false) 
     postedBy(blank:false) 
     ticket (nullable:true,unique:true) 
    } 
} 

Ticket.groovy는

class Ticket { 

     String title 
     String description 
     String postedBy 

     Post post 

     static hasMany = [responses: Response] 

     static constraints = { 
       title(blank:false) 
       description(blank:false) 
       postedBy(blank:false) 
       post (nullable:false,unique:true) 
     } 

} 

이 어느 정도 작동합니다. 내가 할 수

  1. 티켓을 떠나 포스트가 null 속성을 작성하는 경우와 게시물 티켓 내가 명시 적으로 부모 티켓을 가리 키도록 포스트의 티켓 속성을 설정할 수 있습니다
  2. 에게되기 위해 업그레이드 될 때.

그러나이 매핑은 도메인 수준에서 적용되지 않습니다. Ticket1이 Post1을 가리키는 상황에 대한 여유가 있지만 Post1은 Ticket2를 가리 킵니다.

은 내가 티켓 클래스의 static hasOne = [post: Post]를 사용하여 시도하지만 나중에는 포스트 클래스의 static belongsTo = [ticket: Ticket]의 존재를 의무화하고이 아니에요 무엇 의무적으로 1 대 1의 관계가된다 배웠습니다 찾고.

이 시나리오에서 1 : 1 옵션 매핑을 수행 할 수있는 방법이 있습니까? 모든 포인터가 가장 도움이됩니다. 당신은

class Post { 
    // Other fields 

    Ticket ticket 

    static constraints = { 
    // Other constraints 
    ticket (nullable:true,unique:true, validator: { val, obj -> 
     if(val) { 
     return val.post == obj 
     } 
    }) 
    } 
} 

같은 사용자 정의 유효성 검사기는이 문제를 해결할 만드는 고려할 수

+0

만족스러운 답변을 얻으려면 질문을 닫으십시오. 감사! :-) – sbglasius

+0

작동하지 않습니다. 나는 1-1이 창조 될 수 있다고 생각하지 않는다. 나는 아마 그것을 답할 수없는 것으로 닫아야 할까? –

답변

3

?

+0

안녕하세요, 귀하의 솔루션에 감사드립니다! 그것은 (작은 편집으로) 작동하고 적어도 한쪽 끝에 유효성 검사가 있기 때문에 이전 상황보다 낫습니다. 그러나 이제는 Post에 올바른 티켓 인수를 설정했을 가능성이 있습니다 (유효성 검사기가이를 적용했기 때문에). 그런 다음 Ticket으로 돌아가서 가리키는 Post 객체를 변경합니다. 양쪽 끝에서 시행 할 수있는 방법이 있는지 궁금 해서요.하지만 그렇지 않은 것 같아요? : –

+0

다른 쪽 유효성 확인은 어떨까요? 가능해야합니까? – sbglasius

+0

지금 시도 중입니다. –