質問は件名にあります。
現在、私が観察した動作は、 を呼び出したときにParent.removeFromChilds(child)
、 child が DB から削除されないことです (つまり、 で見つけることができますChild.findBy...(args)
)。
それが正しい行動かどうか興味があります。はいの場合 - 1 つのトランザクション内でリレーションと子の両方を削除する最良の方法は何ですか?
いいえの場合 - 何を間違えたらよいですか?
質問は件名にあります。
現在、私が観察した動作は、 を呼び出したときにParent.removeFromChilds(child)
、 child が DB から削除されないことです (つまり、 で見つけることができますChild.findBy...(args)
)。
それが正しい行動かどうか興味があります。はいの場合 - 1 つのトランザクション内でリレーションと子の両方を削除する最良の方法は何ですか?
いいえの場合 - 何を間違えたらよいですか?
デフォルトでは、1 対多の所有側を削除するとカスケードが削除されます。子を削除するだけでは削除されません。これは、関係の所有側で「all-delete-orphan」のカスタム カスケード動作を指定することで変更できます。Grails のドキュメントから:
class Person {
String firstName
static hasMany = [addresses: Address]
static mapping = { addresses cascade: "all-delete-orphan" } }
アップデート
GORM Gotchas のパート 2では、それほど自明ではないaddTo
振る舞いremoveFrom
について非常によく分析されています。あなたが探している正確な情報が含まれていると思います。