これはGrailsユーザのためのものです。私はgrails - userメーリングリストでそれを尋ねましたが、私は数日間これを戦っていたので、私はできるだけ広いネットにキャストすべきだと考えました。Grails - カスケード削除を伴う同じクラスの複数のbelongsTo
2つのオブジェクトを参照する別のオブジェクト(異なるタイプ)の同じタイプの2つの オブジェクト間の関係をモデル化しようとするといくつかの問題があります。
私がしようとしていることの例として、 あなたは家族の間の関係をモデリングしているとします。任意の与えられた関係 "belongsTo" 2つの異なる家族。だから、:
class Person {
hasMany[relationships: Relationship]
static mappedBy = [relationships:'p1', relationships:'p2']
}
class Relationship {
Person p1
Person p2
String natureOfRelationship // for example, "cousins"
static belongsTo = [p1: Person, p2: Person]
}
ここでの意図は、hasManyのマップ内のすべてのリレーションシップのオブジェクトに削除します カスケード、その後、いずれかのP1またはP2が削除された場合ということです。代わりに、私はそれを試すたびに 、私は外国キー違反で終わる。ドキュメントに記載されて、私は 「カスケード」属性を使用してみました:
http://grails.org/doc/1.0.x/guide/single.html#5.5.2.9%20Custom%20Cascade%20Behaviour
をだから私は、私はPersonクラスにこれを追加します考え出し:
static mapping = {
relationships cascade:'delete'
}
私は運を持っていませんでしたどちらかと一緒に。
また、Grailsが生成するdevDB.scriptファイルを見て、 がリレーションシップで外部キーを設定していたことを確認しました。両方の外部キー制約に手動で "ON DELETE CASCADE"を追加すると正常に動作しますが、 自動的に生成されたデータベーススクリプト を手動で編集するのは明らかです。理想的には、GORMを使用してその動作を と指定できるようにしたいと思います。
ここで私の最高の賭けは何ですか? 複数の外部キー/所有者のカスケード削除を強制する方法はありますか? PersonのonDeleteアクション で手動で行う必要はありますか? のためにHibernateの設定を取得する必要がありますか、Grails/GORMで何らかの方法で行うことはできますか?
お時間をおかげで何か助けてもらえますか?
dave、これでどのように解決しましたか?私は、静的mappedBy = [関係: 'p1'、関係: 'p2']のコードさえも問題だと思います –