ユーザー間の投稿/ディスカッションをチケットにアップグレードできるシステムを設計しています。ある特定の場所で、1 対 1 の任意の関係を作成しようとしていますが、特定の問題が発生しています。脚光を浴びているエンティティの要約版を以下に示します。
ルール:
- 必要に応じて、投稿をチケットにすることができます。(オプション)
- チケットには投稿が必要です。(必須)
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を残す投稿を作成します。
- 親チケットを指すように、Post のチケット属性を明示的に設定できます。
ただし、このマッピングはドメイン レベルでは適用されません。Ticket1 が Post1 を指しているが、Post1 が Ticket2 を指しているという状況の余地があります。
Ticketstatic hasOne = [post: Post]
クラスで aを使用しようとしましたが、Postクラスに a が存在することが必須であり、これが必須の 1 対 1 の関係になることを後で知りました。これは私が探しているものではありません。static belongsTo = [ticket: Ticket]
このシナリオでこの 1 対 1 のオプションのマッピングを実現する方法はありますか? どんなポインタでも最も役に立ちます。