私は2つのエンティティ、トランザクションとエントリを持っています。取引には、独自のデータと、デビットとクレジット数からなる1つまたは複数のエントリの一覧があります。アプリケーションの一部では、これらのほとんどすべてを削除する必要があり、この場合、JPQLが最も簡単で高速であることがわかりました。JPAにデータベースの変更を認識させる
私はこのコードを実行します。
entityManager.createQuery(
"DELETE FROM Entry e WHERE e IN (:entries)").
setParameter("entries", new ArrayList<Entry>(
entriesToRemove)).executeUpdate();
entityManager.createQuery(
"DELETE FROM Transaction e WHERE e IN (:transactions)").
setParameter("transactions", new ArrayList<Transaction>(
transactions)).executeUpdate();
問題は、後のコードであり、まだ同じトランザクション(実行トランザクションこの時間)に、私はいくつかのトランザクションに存在するすべてのエントリを通過する必要がある、EntityManagerを私はちょうど最近削除したトランザクションを私に与えます。
このイベントを処理する方法があるはずです。ここの例では、2つの削除JPQLを実行するだけですが、外部サービスなどを呼び出してデータベースに影響を与えることもできます。いずれにしても、削除されたオブジェクトがまだ残っているため、EntityManagerのキャッシュが有効であることを確認する必要があります。
私はentityManager.flush()で試行しました。これらの削除後には成功しません。私はexecuteUpdate()を使うので、削除はすぐに下位のデータベースにフラッシュされるので、私は実際にそれが助けられるとは思っていませんでした。
すべてのポインタ、ヒント、および回答を理解してください。