0

いくつかのオブジェクトを (マッピング ファイルで) キャッシュ可能に構成しましたが、この特定のオブジェクトで確認できることから、キャッシュがうまく機能していません。

他のオブジェクトでは、反復ごとにヒット カウントが増加していますが、ミス カウントは 0 ですが、このオブジェクトではセッションのたびにミスが発生しています。

Elements in Memory: 8305 
Elements on Disk: 0 
Hit Count: 24915 
Missed Count 8305 
Put Count: 8305

何が間違っているのか、いくつかの指針を探しています。

  • バックグラウンドとして、equals と hashCode の実装をチェックしましたが、デバッグでも正しい結果が返されているようです。
  • この特定のオブジェクトは、トップ レベルのオブジェクトだけでなく、他のオブジェクトのコレクションでも使用されます。
4

1 に答える 1

2

確かに、これらの統計は、キャッシュに正しくアクセスしていることを示しています。

ID でオブジェクトを取得する場合、Hibernate はおおよそ次の手順に従います。

  1. 一次キャッシュ (Session オブジェクト) をチェックインする
  2. 二次キャッシュをチェックし、見逃す
  3. データベースからオブジェクトをロードします
  4. 次回のために二次キャッシュに入れる

他のオブジェクトがミスを記録しない理由として最も可能性が高いのは、それらのオブジェクトに ID でアクセスしていないことです。むしろ、直接キャッシュ アクセスが不可能なクエリまたは関連付けを使用していることが原因です。

于 2009-08-17T17:47:14.630 に答える