2011-03-09 5 views
0

私はUserドメインクラスとListドメインクラスを持っています。Grails/GORM:これらの2つのドメインをマッピングする正しい/最良の方法は何ですか?

各リストには作成者(ユーザー)が必要であり、各ユーザーには「プライマリリスト」が必要です。リストのうちのいくつかだけが "primaryList"法を持つでしょう。意図したように2人の関係が誤って一つだけと解釈されているので、当然のことながら

 User: 
    List primaryList 

List: 
    User author 

    static belongsTo = User 

よう

..だから気にいらないが、これは動作しません。私はまた、ユーザーと他のbelongsToにhasManyをListに追加する必要がありますが、私はあなたから正しい答えを得たいので、例を複雑にしたくありません。 Grailsの独立したとして2つのプロパティを見るべき方法

static belongsTo = [user:User] 

+0

"hasManyの" ユーザーリストはできますか? –

+0

@リストはユーザーにのみ属します。 – cripox

答えて

3

ユーザーとリストのフィールドがどのように並んでいるかを説明するには、mappedByを使用する必要があります。ここでは、私が書いたいくつかのドメインがあります。これにより、ユーザーは多くのリストを作成できますが、1つだけを「プライマリ」に設定できます。鶏と卵のシナリオに入ることなく、足場のあるUIを使用できるように、余分な空の制約がいくつかあります。

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 } 
} 

私は、標準のListクラスとの混同を避けるために "FooList" このクラスの名前:

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

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

FooListに「author」というユーザーリファレンスが1つしかありませんか?リストには作者があり、他のユーザのプライマリリストにはなれないためです。それから、私はリストからプライマリリスト(authoredListsでもそうでなくてもかまいません)を知るために、Userから片方向のマークしか必要としません。時間制約のため、FooListの代わりにIntegerのprimaryListIdを入れて解決しましたフィールド...しかし、私は醜いので、それをリファクタリングしたい。 – cripox

2

地図belongsToのアプローチを使用してみてください。

+0

これを試してみましたが、私の実際の作業例はもっと複雑ですが、他の人たちがこれをどうやって行うのか見てみたいと思います。 – cripox

関連する問題