2012-09-22 40 views
0

我想創建2個域類UserMailBox如何在Grails中正確創建多個一對一的雙向關係?

將有2 Mailbox每個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 
} 

創建這種關係的正確方法是什麼?

回答

0

如何具有對郵箱的基類?基類可以具有所有的郵箱屬性。子類可以暫時爲空,如果您發現需要收件箱發送框特定屬性,您可以填充進一步開發應用程序。

這應該工作。

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

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

class User { 
    InboxMailBox inbox 
    SentMailBox sent 
} 
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) 
    } 
} 
相關問題