私はDoctrine 2を自分のORMとして使用していますが、状況は順調ですが、私はEntityManager#persist()
メソッドについて疑問に思っています。 "Persisting entities"ドキュメントオブジェクトX
ためpersist()
への呼び出しについては、次の言葉:いつ呼び出すかを知っている
Xは既存の管理対象エンティティである場合、それは持続操作によって無視されます。
これは、persist()
がオブジェクトが新規であり、まだデータベースに保存されていない場合にのみ呼び出す必要があると私に導きます。しかし、"Deferred Explicit" change tracking policyのドキュメントは言う:
...ドクトリン2のみのEntityManagerの呼び出し#存続(エンティティ)を介して明示的変化検出のためにマークされているエンティティを考えて...
... persist()
のような音は、それが全く更新されないようにオブジェクト上で呼び出さなければなりません。いつpersist()
を呼び出す必要がありますか?新しいオブジェクトだけの場合は、エンティティが更新されるたびにそれを呼び出すための有意義なパフォーマンスヒットがあり、Doctrineにその違いを整理させますか?
遅延暗黙の変更トラッキング(デフォルト)を使用すると、Doctrineは、UnitOfWork内にあるすべてのエンティティについて、元の値とすべてのプロパティの新しい値(これまではDeferred Explicitと同じ)を比較しますあなたが 'persist()'と呼んでいるものです。 –
デフォルトポリシーがDeferred Explicitポリシーであると考えられて問題が発生するまでの半分の人生が生きています。 –