2012-04-21 20 views
4

私は2つのクラスのCarとGarageを持っています。彼らはm:n関係を持っているので、1台の車には多くのガレージがあり、1台のガレージには多くの車があります。Grails GORM多対多リレーションシップとジョイント可能エントリの削除

私のデータベースには関係が保存されているgarage_has_carテーブルがあります。私はガレージに車コレクションをクリアして保存した場合 私はガレージ

static belongsTo = [ Garage ] 

に車にbelongsToのを設定して設定した、garage_has_carテーブル内の対応するエントリは削除されます。

車でガレージコレクションをクリアして保存すると、garage_has_carテーブルの対応するエントリは削除されません!

どうすればこの問題を解決できますか? (関係定義を追加)

UPDATE 1:ガレージで

関係は次のとおりです。車で

cars column:'deskriptor_id',joinTable:'garage_has_cars' 

それは私がIRCでこの質問をしてきました

static belongsTo = [ Garage ] 
garages column:'car_id',joinTable:'garage_has_cars' 

です誰かが答えました:

(...)grails多対多の関係は、常に一方向にのみカスケードされます。グレイルの多対多の関係も、休止状態でどのようにマッピングされるかによってひどく非効率的です。それらを使用しないでください。 1台の車と1台のガレージで、JoinclassドメインオブジェクトCarGarageを作成します。あなたのクラスの車とガレージのプロパティを一時的にし、関係を維持するためにあなたのjoinclassを使用するcarクラスとgarageクラスにgetメソッドとaddメソッドを追加します。それは同じ問題に誰かを助けるかもしれないので、私はこの引用を投稿Grails: Many-to-Many without hasMany/belongsTo - instead using native 3NF - Searching full text

:あなたもここでクラス に参加するいくつかの情報は、このプレゼンテーションhttp://burtbeckwith.com/blog/files/169/gorm%20grails%20meetup%20presentation.pdfで見つけることができ、それのノートはここにある年代にバージョン管理を無効にしたいです私が持っています。これらの変更を実装する時間があれば、この質問を更新します。

+0

ここにあなたの多くの2つの関係(関連のみ)を投稿できますか? – Nurlan

+1

ええ、あなたが発見したように、多対多の関係を管理する関連オブジェクトが必要です。しかし、非効率を回避するだけではなく、私はいつも、片側または複数の情報を必要とすることになります(たとえば、車をガレージに追加した日付など)。 「テーブルのような」名前ではなく、あなたのアプリには意味をなさない名前を選んでみたいかもしれません。たぶん "GarageSlot"。 "CarGarage"を使用すると、混乱する可能性があります。 –

答えて

0

答えられていないリストから削除することをお勧めします。

(...)grails多対多の関係は常に1つだけカスケードされます 方向です。 grailsのmany-to-many関係もひどくで、それらがhibernateでどのようにマッピングされるかに非効率的です。それらを使用しないでください。 1つの車と1つのガレージで、JoinclassドメインオブジェクトCarGarageを作成します。 クラスのトランジェントの車とガレージのプロパティを作成し、 のgetおよびaddメソッドを使用して、 継承クラスを使用して関係を維持します。あなたもここでいくつかの情報は、この プレゼンテーション http://burtbeckwith.com/blog/files/169/gorm%20grails%20meetup%20presentation.pdf 、それがここにいるのノートで見つけることができます参加クラスに バージョン管理を無効にする:Grailsの:多対多の hasManyの/ belongsToのなし - 代わりにネイティブ3NFを使用して - 全文検索

関連する問題