사용자 간 게시물/토론을 업그레이드하여 티켓이 될 수있는 시스템을 설계하고 있습니다. 특정 장소에서 나는 일대일 선택적 관계를 만들려고 노력하고 있지만 특정 문제에 직면하고 있습니다. 스포트라이트에있는 엔티티의 응축 버전이 아래에 나와 있습니다.Grails/GORM : 일대일 선택적 관계 만들기
규칙 : 필요한 경우
- 게시물이 티켓이 될 수 있습니다. (선택)
- 티켓에는 반드시 포스트가 있어야합니다. (필수)
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)
}
}
이 어느 정도 작동합니다. 내가 할 수
- 티켓을 떠나 포스트가 null 속성을 작성하는 경우와 게시물 티켓 내가 명시 적으로 부모 티켓을 가리 키도록 포스트의 티켓 속성을 설정할 수 있습니다
- 에게되기 위해 업그레이드 될 때.
그러나이 매핑은 도메인 수준에서 적용되지 않습니다. 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
}
})
}
}
같은 사용자 정의 유효성 검사기는이 문제를 해결할 만드는 고려할 수
만족스러운 답변을 얻으려면 질문을 닫으십시오. 감사! :-) – sbglasius
작동하지 않습니다. 나는 1-1이 창조 될 수 있다고 생각하지 않는다. 나는 아마 그것을 답할 수없는 것으로 닫아야 할까? –