0

これが私のシナリオです:

2 つの春のトランザクション (P = 必須、I = デフォルト) にまたがるプロセスがあります。

T1 で、B の空のコレクションを持つエンティティ A をインスタンス化しました。

A エンティティと B エンティティの両方、および oneToMany 関係は @Cache アノテーションでマークされています。

キャッシュ プロバイダーとして ehcache を使用しています。

T1 で、エンティティ A をマージしました。

T2 で、もう一度マージします。

問題は、エンティティ A が T2 にマージされるたびに、Hibernate が B のコレクションに対してクエリを実行することです。これは、B が 2 番目のレベルのキャッシュで見つけることができなかったためです。

コレクションがロードされるとすぐに、キャッシュが使用されます (新しいトランザクション T3 で同じマージを行った場合、キャッシュからコレクションが取得されます)。

このクエリが実行されないようにするにはどうすればよいですか? IE: ロードする前に、hibernate second-level-cache を新しく作成されたコレクションにする方法は?

また、第 1 レベルのキャッシュを使用して、T1 と T2 の間で 1 つの休止状態セッションをスレッド バウンドにすることも考えました (ただし、コレクションでも機能するかどうかはわかりません...)手順?これを達成する方法は?

TKS。

4

1 に答える 1

0

あなたが指定したこの問題について、つまり「問題は、A エンティティが T2 でマージされるたびに、Hibernate が B のコレクションに対してクエリを実行することです。これは、2 番目のレベルのキャッシュでそれを見つけることができなかったためです。」inverse property休止状態を確認する必要があります。値を設定するだけinverse=trueで、B のコレクションを再度取得することはありません。逆プロパティの詳細な説明は、リンクにあります。

これが、逆プロパティに関連する他の問題を理解するのに役立つことを願っています.

于 2012-10-23T10:44:02.097 に答える