2

このシナリオを想像してみてください。

データベースから削除する必要のあるいくつかのエンティティのIDの配列(つまり、レコードを3番目のテーブルに識別するいくつかの外部キー)と、更新/挿入する必要のあるいくつかのエンティティのIDの配列(に基づいて)があります現時点では重要ではないいくつかの基準)。

それらのエンティティを削除するにはどうすればよいですか?

  • dbからそれらをロードします(リポジトリの方法)
  • delete()得られたオブジェクトを呼び出す
  • flush()エンティティマネージャーに電話する

そのシナリオでは、を呼び出す前に他のレコードを更新/挿入できるため、すべての操作をアトミックにすることができますflush()

しかし、なぜそれらを削除するためだけにいくつかのレコードをデータベースからロードする必要があるのでしょうか?だから私は自分の個人的なDQLクエリを(レポに)書き、それを呼び出しました。
問題は、その関数をリポジトリに呼び出すと、この操作がすぐに実行されるため、「アトミック性」が保証されないことです。

では、2番目の「delete-option」に従って、この障害を「ジャンプ」するにはどうすればよいでしょうか。

4

1 に答える 1

1

を使用flush()することで、Doctrineを作成して暗黙的にトランザクションを開始します。トランザクションを明示的に使用することも可能であり、そのアプローチで問題が解決するはずです。

于 2012-11-09T17:21:34.673 に答える