2012-02-21 4 views
5

私は2つのオブジェクト、ObjectAObjectBを持っています。GORMでオプションの1対1リレーションシップを使用するにはどうすればよいですか?

ObjectAが作成される、ObjectBは(これは、まだデータがないし、できない)しないがまだ存在します。 ObjectB一旦

が作成され、それが適切なものがが存在する場合、対応するObjectAに取り付けられている必要があります。適切なObjectAがない場合、新しいObjectBは単に1つに接続されません。

だから、すべてのObjectAインスタンスが結局ObjectBに添付さますが、すべてではないObjectBインスタンスがObjectAを持つことになります。

基本的に、私はこのようなデータベーステーブルを構築するためにGORMを探しています:

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

ObjectB 
- Id (NotNull, unique) 

私はこれを行うにはGORMドメインクラスを一緒に置くことができますどのように?

私はちょうど約hasOnebelongsTo、生の特性、nullable: trueunique: true制約のすべての組み合わせは、私が考えることができるしようとしましたが、私は必要 1が欠落します。これは特にそうではないようです奇数シナリオだから、でなければなりません。

Class ObjectA { 
    ObjectB objectB 

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

Class ObjectB { 
    static belongsTo = [objectA: ObjectA] 

    static constraints = { 
     objectA nullable: true 
    } 
} 

私は周りのように見えることはできませんこれで唯一の難点は、それが設定することも可能であるということです。ソリューションに私を導く問題に一緒に私の考えを入れ、よくあること

答えて

5

既にObjectBと関連付けられているからObjectAまでです。新しいアソシエーションを保存するとき、GORMはアソシエーションを保存しません。エラーはスローされず、新しいObjectBをデータベースから取り出すと、objectAプロパティは未設定のままになります。

ObjectBクラスのobjectAの制約にunique: trueを追加することは役に立ちません。静かに失敗する代わりに、一意性検査が未設定のパラメータのために失敗していることを示すエラーがスローされます。

関連する問題