数日間、コード内の奇妙な envers の動作をデバッグしていて、驚いたことに遭遇しました。これが私の問題に寄与していないことを確認しましたが、とにかく私の仮定を確認する価値があると思いました.
現在の Hibernate セッションを 1 つのスレッドの複数の場所で取得すると (スレッド セッション コンテキストを使用しています)、常に同じセッションを取得するため、同じレベル 1 キャッシュにヒットします。
監査リーダー インスタンスを取得するときに、envers で同様の動作を想定していました。AuditReader reader = AuditReaderFactory.get(session);
インスタンスを取得するために使用していAuditReader
ます。これが呼び出されるたびに (同じセッション コンテキスト内であっても)、一意の第 1 レベル キャッシュ インスタンスを含む新しい監査リーダー インスタンスが取得されることに気付きました。
これは、せいぜい、複数の重複する可能性のあるキャッシュのパフォーマンス ヒットになるように見えます。
セッション コンテキストの場合、常に同じAuditReader
インスタンスを取得するため、単一の第 1 レベル キャッシュを取得すると想定していました。そうでない理由が思いつきません。
これにより、次の 4 つの可能性が残されます。
- セッションコンテキストの監査リーダーを取得するための正しい方法を使用していません
- 複数の監査リーダー インスタンスを持つには十分な理由があります
- Envers の奥のどこかにバグがあります
- 監査リーダー インスタンスを再利用しても意味がありません。
誰かがこれについての洞察を提供してもらえますか。
ありがとう。