2011-08-01 5 views
4

サービスオブジェクトによって処理される特定のイベントで、その状態に一致するすべてのインスタンスを調べる必要がある特定の状態を持つドメインオブジェクトがあります。このイベントはかなり頻繁に発生するため、毎回ハイバネートクエリを実行すると効率が悪くなります。だから私は起動時に保存し、必要なときにはいつでも保持するこれらのコレクションを持っています。私は休止状態の第2レベルのキャッシュを使用するべきですか?

私は休止状態の第2レベルのキャッシュを設定した場合、性能について心配することなく私のコードに以下の変更を加えることができますか?

から:

public void handleEvent(SomeEvent someEvent) { 
    for (Entity entity : matchedEntitiesSet) { 
     // evaluate each entity for required changes. update state as needed 
     // persist any changes 
    } 

    // update my collection with the current repository result. 
} 

へ:私のサービス内で一致したと述べたエンティティのセットを維持することとは対照的に、

public void handleEvent(SomeEvent someEvent) { 
    for (Entity entity : dao.getSomeEventsByCriteria(criteria)) { 
     // evaluate each entity for required changes. update state as needed 
     // persist any changes 
    } 
} 

効果的に私は、排他的にDAOを使用するように変更します。

答えて

2

はい、正確にはwhat the second-level cache/query cacheです。 Hibernateはそれをより一貫して効果的に処理します。プロファイラは、パラメータを満たすためにキャッシュを調整するのに役立ちます。あなたはそれを最適化しようとする前にアプリをプロファイルしましたか?

関連する問題