0

2 つのドメイン クラスを作成しようとしていますがUserMailBox

Mailboxそれぞれに2Userつあり、1 つはsent、もう 1 つは ですinbox

これを解決するために複数の方法を試しました:

1 - (マッピング例外で失敗)

Mailbox {
}

User {
    static hasOne=[inbox:Mailbox, sent:Mailbox]
}

2 - (私がそれを使用しようとするまでは完全に問題なく、その後の値は常にsentなります)null

Mailbox {
    static belongsTo = [user: User]
}

User {     
    Mailbox inbox
    Mailbox sent
}

3 - (新しいユーザーを作成しようとしたとき:new User(inbox: new Mailbox(), sent: new Mailbox()).save()失敗しました)

Mailbox {
    static belongsTo = [user: User]
}

User {
    static mappedBy = [inbox: 'id', sent: 'id']
    Mailbox inbox
    Mailbox sent   
}

この関係を作成する適切な方法は何ですか?

4

2 に答える 2

0

メールボックスの基本クラスを用意するのはどうですか? 基本クラスは、すべてのメール ボックス プロパティを持つことができます。子クラスは今のところ空にすることができますが、アプリケーションをさらに開発するにつれて、受信ボックスまたは送信ボックス固有のプロパティの必要性を発見した場合に入力できます。

これはうまくいくはずです。

class InboxMailBox extends MailBox {
    static belongsTo = [user: User]
}

class SentMailBox extends MailBox {
    static belongsTo = [user: User]
}

class User {
    InboxMailBox inbox
    SentMailBox sent
}
于 2012-09-24T02:28:58.977 に答える
0

双方向の関連付けは、1 つのプロパティから別のプロパティにのみマッピングできます。プロパティを複数のプロパティにマッピングすることはできません。

class Mailbox {
    static belongsTo = [user: User]
    static mappedBy = [user: 'one']
}

class User {
    Mailbox inbox
    Mailbox sent

    static constraints = {
        inbox(nullable: true)
        sent(nullable: true)
    }
}
于 2012-09-23T10:39:56.913 に答える