2011-03-09 60 views
0

我有一個用戶域類和一個列表。Grails/GORM:映射這兩個域的正確/最佳方法是什麼?

每個列表都必須有一個作者(一個用戶),每個用戶必須有一個「主列表」。只有一些名單將有「primaryList」法規。

所以..財產以後像

 User: 
    List primaryList 

List: 
    User author 

    static belongsTo = User 

當然按預期這不起作用,因爲二者的關係被誤認爲是唯一的一個。我也應該添加一個hasMany在用戶和其他belongsTo到列表...,但我不想複雜的例子,因爲我想從你得到正確的答案。

+0

可以列表「的hasMany」用戶? – 2011-03-10 03:30:27

+0

@長列表只屬於一個用戶。 – cripox 2011-03-11 21:08:13

回答

3

您可能需要使用mappedBy來解釋用戶和列表中的字段是如何排列的。以下是我編寫的一些允許用戶創作多個列表的域,但只能將其中一個設置爲「主要」。有幾個額外的可空約束,所以你可以使用腳手架的用戶界面,而不會陷入雞與雞蛋的情況。

class User { 
    String name 
    FooList primaryList 

    static hasMany = [authoredLists: FooList] 

    static mappedBy = [primaryList: 'primaryOwner', authoredLists: 'author'] 

    static constraints = { 
     primaryList nullable: true, unique: true 
     authoredLists nullable: true 
    } 

    String toString() { name } 
} 

我命名這個類「FooList」只是爲了避免與標準清單類的困惑:

class FooList { 
    static belongsTo = [author: User, primaryOwner: User] 

    static constraints = { 
     primaryOwner nullable: true, display: false 
    } 
} 
+0

我不能只在FooList上有一個用戶參考 - 「作者」?因爲列表不能有作者並且是其他用戶的主要列表。然後我只需要一個來自用戶的單向標記來知道哪個列表是主列表(它可以在授權列表中);由於時間限制,我通過將一個Integer的primaryListId而不是一個FooList字段......但我想重構它,因爲它很醜。 – cripox 2011-03-12 10:48:31

2

嘗試使用地圖屬於關聯的方法:

static belongsTo = [user:User] 

的Grails這樣應該可以看到2個屬性作爲單獨的。

+0

試過這個,其實我的工作例子比較複雜,但我想看看別人會怎麼做。 – cripox 2011-03-09 18:44:54

相關問題