上記の2つのオプションの違いは何ですか?各オプションを選択するのが望ましいのはいつですか?
それらの基本的な違いは次のとおりです。
OrphanRemoval = trueオプションを使用する場合、Doctrineは、エンティティがプライベートに所有され、他のエンティティによって再利用されないという仮定を立てます。この仮定を無視すると、エンティティはDoctrine。
User
に1対多Comment
との関係があるとします。 cascade="remove"
を使用している場合、1つComment
からUser
の参照を削除できます。次に、そのComment
を別のUser
にアタッチします。それらを永続化すると、それらは正しく保存されます。ただし、orphanRemoval=true
を使用している場合、指定されたComment
を1つUser
から削除しても、そして、別のUser
にアタッチすると、参照が削除されているため、このコメントは永続化中に削除されます。