如何在Grails中正确创建多个一对一的双向关系?

时间:2012-09-22 15:57:47

标签: grails gorm grails-domain-class

我正在尝试创建2个域类UserMailBox

每个Mailbox将有2 User,其中一个sent,另一个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   
}

创建这种关系的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

双向关联只能从一个属性映射到另一个属性,您不能将属性映射到多个属性:

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

class User {
    Mailbox inbox
    Mailbox sent

    static constraints = {
        inbox(nullable: true)
        sent(nullable: true)
    }
}

答案 1 :(得分:0)

如何为邮箱设置基类?基类可以具有所有邮箱属性。子类可以暂时为空,如果您在进一步开发应用程序时发现需要收件箱发送框特定属性,则可以填写这些类。

这应该有用。

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

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

class User {
    InboxMailBox inbox
    SentMailBox sent
}