5

@Cache アノテーションを使用して、アプリケーションで第 2 レベルのキャッシュを定義しました

次のように、findById クエリを使用しています。

  long id = 4;    
        Company cmp = companyDAO.findById(id);

Company は、DB から取得したオブジェクトです。

Company オブジェクトが DB からのものかキャッシュからのものかを確認するにはどうすればよいですか?

4

3 に答える 3

8

Company オブジェクトが DB からのものかキャッシュからのものかを確認するにはどうすればよいですか?

Hibernate は特定のカテゴリを使用して、すべての二次キャッシュ アクティビティをログに記録します。関連するカテゴリは です。ロギング フレームワークの設定でデバッグorg.hibernate.cacheを有効にするだけです。

章 3.5 ロギングを参照してください。

于 2010-07-01T12:27:12.293 に答える
3

HitCount および/または MissCount APIを試してください。

このようなもの.....

int oldMissCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getMissCount();
int oldHitCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getHitCount();

 long id = 4;    
 Company cmp = companyDAO.findById(id);

 int newMissCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getMissCount();
 int newHitCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getHitCount();
 if(oldHitCount+1 == newHitCount && oldMissCount+1 == newMissCount) {
    logger.debug("came from DB");
   }  else if(oldHitCount+1 == newHitCount && oldMissCount == newMissCount) {
    logger.debug("came from cache");
}
于 2010-07-01T09:26:30.237 に答える
0

キャッシュ ロギングをオンにします。

于 2010-07-01T11:09:04.100 に答える