2

アプリケーションでhibernateでehcacheを使用しています。

ehcacheを使用してキャッシュすることはできますが、次のようなことを実現しようとしています。

  1. 最初は自分のアプリケーションで頻繁に使用しているデータベーステーブルをキャッシュしたい。

  2. テーブルをキャッシュした後、hqlクエリでどのように使用できますか?私のhqlクエリのように、それぞれのdbテーブルにPojoクラス名を使用します。この場合、hqlクエリをどのように使用できますか?

上記のドキュメントまたはサポートを提供してください。

4

1 に答える 1

1

ehcacheのドキュメントでは、これについて詳しく説明しています

基本的に、@Cacheアノテーションを使用して、キャッシュへのアクセスのタイプをHibernateに伝えることができます。

ehcache構成では、エンティティごとに1つのキャッシュを構成できます。クラス名が鍵です。これにより、エンティティごとにキャッシュする要素の数を定義できます。

Hibernateでクエリをキャッシュする場合は、プロパティhibernate.cache.use_query_cacheをに設定しますtrue。HQLを使用すると、Hibernateは「正しいことを行う」ようになります。

[編集]

キャッシュをプライムするにはどうすればよいですか?

オブジェクトをロードして、Hibernateがクエリのためにオブジェクトを必要とするときにそれらがキャッシュにあるようにすることができます。

しかし、キャッシングは非常に複雑なトピックです。キャッシュの使用を許可および防止する多くの要因があります。単純なケースの場合、キャッシングは「正常に機能」し、何もする必要はありません。複雑なHQLがある場合は、何が起こる可能性があります。where句の値に応じて、同じクエリに100ミリ秒または10秒かかる例を見てきました。キャッシングによって全体が遅くなるコードを見てきました。Hibernateが単に法案に適合しなかったため、Hibernateセッションから基になる接続を要求し、すべてを自分で行ったコードを見てきました。

通常のアプローチは、コードをできるだけ単純にし、結果をしばらくの間本番環境で実行することです。やがて、ユーザーはそれが遅すぎる場所について不平を言うようになります。次に、それらのいくつかの場所を最適化できます。このようにして、ユーザーが気にしないコードに時間を浪費することはありません。

于 2012-10-10T09:19:12.533 に答える