Я разрабатываю систему, в которой сообщения / обсуждения между пользователями могут быть обновлены, чтобы стать билетами. В одном конкретном месте я пытаюсь создать необязательные отношения один к одному, но сталкиваюсь с определенными проблемами. Краткое описание сущностей в центре внимания приведено ниже.
Правила:
- Почта может стать Билетом, если требуется. (По желанию)
- Билет должен иметь почту. (Обязательно)
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)
}
}
Это работает в некоторой степени. Я могу:
- Создать сообщение, оставив атрибут билета пустым Если и когда сообщение будет обновлено, чтобы стать билетом
- Я могу явно установить атрибут билета Post, чтобы он указывал на родительский билет.
Однако это сопоставление не применяется на уровне домена. Это оставляет место для ситуации, когда Ticket1 указывает на Post1, но Post1 указывает на Ticket2.
Я пытался использовать static hasOne = [post: Post]
в классе Ticket , но позже узнал, что он требует наличия static belongsTo = [ticket: Ticket]
в классе Post , и это становится обязательным 1- отношения к-1, которые я не ищу.
Есть ли способ добиться этого дополнительного отображения 1 к 1 в этом сценарии? Любые указатели будут наиболее полезны.