ご意見に基づき、問題はあなたがかなりのEntityManager /セッションに指定された2つの除去方法を使用するよりも、実体参照を削除するためにHQLを使用している事実である:
session.delete(Object)
entityManager.remove(Object)
JPQLまたはHQLステートメントを使用する場合、Hibernateは特定のイベントを発生させないため、これらのイベントをリスンする統合は通知されません。この場合、post-delete
イベントが発生しません、あなたはREVTYPE
行がRevisionType.DEL
エントリに追加されて見ることはありませんなぜそれがです。上記2つのに述べた方法のいずれかを使用して
はあなたの問題を解決します。
ここで重要な点は、HQL/JPQL文が、CriteriaDelete
とCriteriaUpdate
というJPAの意図と同じように、一括操作として機能できることです。これらは、永続性プロバイダは、必ずしも永続コンテキストに負荷エンティティ状態にせずに、データベース・オブジェクトにバルクで、潜在的にDML操作を適用することを意味します。
は、あなたがしようとしているユースケースを考えてみて。エンティティがデータベースからロードされておらず、単にDELETE FROM YourEntity WHERE id = :id
と呼んでいるとします。いいえエンティティの状態は、この場合にはロードされていないので、イベントが発生するようにしている場合、知られている唯一の関連情報は、次のとおりです。
- エンティティタイプ
:id
で指定された指定された値でid
という名前のいくつかの属性。
この場合、属性は、おそらく主キーですが、それは簡単にそのエンティティクラス上の任意のランダムな属性だったかもしれないので、実際にして永続コンテキストを初期化せずに、このようなユースケースを監査する有効な方法はありませんエンティティの状態が最初になります。これは、操作が大量の行に対して行われた場合は、特にDELETE
操作では無駄な操作になります。
についてのいくつかの洞察を提供したいと思っています。なぜあなたはあなたが何をするかを見ます。
あなたは休止状態に、このプロパティを渡しているかなどがもらえますか?それはhibernate.propertiesファイルか、またはある種のスプリング構成ですか? appContext-hibernateの – Naros
。XML: 、プロパティの設定を使用して、クラスパスのルートにhibernate.propertiesファイルを作成する場合 –
真<キー= "org.hibernate.envers.store_data_at_delete" を支える>とあなたのシナリオを再試行しますか? – Naros