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
は、エンティティタイプのためには、キャッシュ内の オブジェクトを示しているが、キャッシュミスが記録されています。- クエリがキャッシュミスの後に火災に示すが、それは古い データを返している
私はへの挿入を期待する(この特定の場合には、インサートとして空のリストではありません が返されます)それがキャッシュに入っていることを確認してください。キャッシュされていない場合でも、キャッシュヒットが失敗してから正しいクエリが実行されます。しかし、オブジェクトをキャッシュに入れないと失敗したクエリは、厄介な組み合わせです。
私はそれを言及すべきでした - 私はチェックしました、それはまだデフォルト( 'FlushMode.AUTO')に設定されています –