Order
オブジェクトが多くのステップを経て構築される注文プロセスを構築しています。各ステップの後、部分的に完成Order
したオブジェクトをに入れsession
、最後のステップでそれをデータベースに保存します。
手順中に、他の (既に存在する) 関連オブジェクトを自分のOrder
オブジェクト (例: ) に読み込みますDiscountCoupon
。問題は、に保存Order
しsession
て次のステップでロードすると、関連付けられているすべてのエンティティが切り離されることです。そのため、データベースに保存しようとすると、例外がスローされ、リレーションシップにEntityManager
a を設定するよう求められます。cascade=persist
もちろん、これらのオブジェクトを永続化する必要はありません (それらは既にデータベースに存在します)。明白な解決策は、これらの関連付けられたオブジェクトを (メソッドを使用して) マージされたものに変更することですがEntityManager#merge
、複数のレベルのエンティティが埋め込まれたかなり複雑なオブジェクト構造を持っているため、上記のプロセスを実行するのはかなり不便です。
Doctrine は自動的にこのタスクを実行できませんか? したがって、切り離されたエンティティについて「不平を言う」代わりに、それらを自動的にマージできます。