2011-12-28 9 views
1

Hibernate 3.3、ehCache 2.4.7、C3P0 0.9.1.2、MySQL(確認されたクエリキャッシュがオフ)でクエリと第2レベルのキャッシュから一貫したリターンを得ることができません。Hibernateセカンドレベルのキャッシュが古くなったデータを戻す(時々)

新しいオブジェクトを挿入した後、そのオブジェクトをフェッチすると(約4分の1)、挿入されたオブジェクトが返されないことがあります。私は挿入が直接データベースクエリを介して動作していることを確認できます。

挿入されたエンティティは、次のような注釈を付けています(これは、新規ユーザーの作成プロセスだとして、文字列であり、ユーザ名)@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)

それは失敗し、その主キーにfindByIdクエリです。

成功し、その後のすべての呼び出しで、キャッシュヒットがクリアされ、予期したとおりにクエリが実行されません。

2つの不審な問題があります。

  • stats.getSecondLevelCacheStatisticsは、エンティティタイプのためには、キャッシュ内の オブジェクトを示しているが、キャッシュミスが記録されています。
  • クエリがキャッシュミスの後に火災に示すが、それは古い データを返している

私はへの挿入を期待する(この特定の場合には、インサートとして空のリストではありません が返されます)それがキャッシュに入っていることを確認してください。キャッシュされていない場合でも、キャッシュヒットが失敗してから正しいクエリが実行されます。しかし、オブジェクトをキャッシュに入れないと失敗したクエリは、厄介な組み合わせです。

答えて

0

希望するのは、あなたが設定したセッションのFlushModeのためではありません。 FlushMode.COMMITまたはFlushMode.MANUAL(および手動フラッシュが呼び出されていない)が使用されているとわかっているように、古いオブジェクトを取得する可能性があります。

+0

私はそれを言及すべきでした - 私はチェックしました、それはまだデフォルト( 'FlushMode.AUTO')に設定されています –

関連する問題