0

私は主に読み取り専用のアプリケーションを持っているので、ほとんどのクエリは Hibernate の第 2 レベルのクエリ キャッシュを使用します。ページが読み込まれるたびに実行する必要があるクエリが 1 つあるため、レイアウト GSP から次のように呼び出します。

${Book.countByApproved(true, [cache: true])}

Book追加して、クラスの第 2 レベルのキャッシュを有効にしました。

static mapping = {
    cache true
}

Book.groovy。また、次のように構成していますDataSource.groovy

hibernate {
  cache.use_second_level_cache = true
  cache.use_query_cache = true
  cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}

この同じファイルlogSql=trueで、dataSourceブロックを追加してクエリ ログを有効にしました。

ページをロードするたびにBook.countByApproved(true)クエリがログに記録されるので、これは結果がクエリ キャッシュから取得されていないことを意味すると思いますか? すべてをローカルで実行しているため、キャッシュされたクエリ結果の有効期限が切れたためにキャッシュが失われる可能性はありません。

これが関連しているかどうかはわかりませんが、Hibernate Filters プラグインを使用しており、クラス用にデフォルトのフィルターが構成されていますBook。休止状態フィルターとクエリ キャッシュの使用に問題があるのではないでしょうか?

4

1 に答える 1

2

私が間違っていなければ。あなたの質問とまったく同じ質問があり、アドバイスは GSP でクエリを使用しないことでした。これをフィルターで試して、キャッシュが機能するかどうかを確認してください。

于 2013-05-14T12:16:20.930 に答える