2

監査機能を実行するための FlushEventListener があります。いくつかのエンティティを更新している間、hibernate はフラッシュする直前に監査コードをコールバックします。監査コードは、データベースにクエリを実行する必要があります。

同じセッションでそれを行おうとすると、明らかにセッションの状態が台無しになります。NaturalIdXrefDelegate という名前のクラス内で NaturalIds を検証しているある時点で、hibernate 内から NullPointerException を取得します。

現在、監査クエリの新しいセッションを開くことで解決しています。これの問題は、getCurrentSession (hibernate によって管理されるリクエスト全体のセッション) の利点を失っていることです。このようにして、クエリごとに 1 つのセッションを開くことに戻ります。

これに対する洗練された解決策はありますか、それとも基本的に getCurrentSession を再実装して、リクエストで独自のセッション #2 を管理する必要がありますか?

4

1 に答える 1