2012-02-21 34 views
5

我有2個對象,ObjectAObjectB我如何在GORM中有一個可選的一對一關係?

ObjectA被創建,ObjectB不(和不能,由於不具有數據還)存在尚未。

一旦創建了ObjectB,它需要附加一個對應的ObjectA如果存在一個合適的。如果沒有合適的ObjectA,那麼新的ObjectB根本就沒有連接到一個。

因此,所有ObjectA實例將最終附加到ObjectB,但並非所有ObjectB情況下,將有ObjectA

從本質上講,我正在尋找格姆建立這樣的數據庫表:

ObjectA 
- Id (NotNull, unique) 
- ObjectB_Id[FK: ObjectB.Id] (unique) 

ObjectB 
- Id (NotNull, unique) 

我怎麼能放在一起GORM域類來做到這一點?

我已經嘗試過的hasOnebelongsTo,原始屬性,nullable: trueunique: true約束每一個組合我能想到的,但我必須缺少一個。這似乎不是特別的奇怪的的情況下,所以必須是一種方式來實現這一點。

回答

5

由於通常情況下,把我的思緒連成一個問題使我的解決方案:

Class ObjectA { 
    ObjectB objectB 

    static constraints = { 
     objectB nullable: true, unique: true 
    } 
} 

Class ObjectB { 
    static belongsTo = [objectA: ObjectA] 

    static constraints = { 
     objectA nullable: true 
    } 
} 

與此唯一的問題,我似乎無法避開的是,它可以設置ObjectB.objectA到已經與ObjectB關聯的ObjectA。當保存新的關聯時,GORM只是不保存關聯。沒有錯誤被拋出,並且將新的ObjectB拉出數據庫留下它的objectA屬性未設置。

unique: true添加到objectA約束ObjectB類也沒有幫助。由於未設置參數,而不是以靜默方式失敗,將引發錯誤,指示唯一性檢查失敗。

相關問題