4

私の休止状態のプロジェクトで第2レベルのキャッシュを使用したいが、私はちょうど休止状態の第2レベルのキャッシュについて少し知っている。これは私のコードで、どのような設定と.jarファイルが必要ですか?これらの私のhibernate.cfg.xmlファイル休止状態第2レベルキャッシュ<< net.sf.ehcache.hibernate.EhCacheProvider >>

<property name="hibernate.cache.use_query_cache">true</property> 
    <property name="hibernate.cache.use_second_level_cache">true</property> 
    <property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property> 

と私は、他の設定を変更shoud知ってほしいこれらのjarファイルehcache-1.6.1.jar, ehcache-1.6.1-javadoc.jar, ehcache-1.6.1-sources.jar を追加する設定 は私が設定されていますか?

プロジェクトで第2レベルのキャッシュが使用されていることをどのように理解できますか?ただ、この設定を置けば

、これを使用して、自動的に休止状態または私は(任意の注釈または何か他のもののように)私の.javaクラスでant他のコードを使用する必要があります

答えて

5

あなたが探している注釈はorg.hibernate.annotations.Cacheです。基本的な使い方は次のとおりです。クエリのために

@Entity 
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public MyEntity { 
    ... 

    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
    public List<ElementType> getSomeCollection() { 
    ... 
    } 
} 

、あなたはtrueにhibernate.cache.use_query_cacheプロパティを設定することによりenable query cacheする必要があり、そのクエリを指定します(名前付きクエリのために)その宣言にまたはクエリのインスタンスにsetCacheable(true)を呼び出すことでキャッシュ可能です。

キャッシングには本当に注意する必要があります。本当にわかりますあなたがやっていることを本当に理解してください。さもなければ、それは助けよりも害を及ぼします。それを「クイックフィックス」と見なさないでください。たとえば、すべてをキャッシュすると、が間違っているのです。間違ったことはです。

+0

1- Shoud私はEntityクラスの上に@Cacheを定義していますか?私のプロジェクトで2番目のレベルのキャッシュを使用したい場合や、上記の@Cacheを特定のエンティティクラスに設定することはできますか? 2使用するsecond_level_cacheの実装のアノテーション構文に違いはありませんか? (私はnet.sf.ehcache.hibernate.EhCacheProviderを使用します) – Am1rr3zA

+1

1)すべてのエンティティをキャッシュ可能にするべきではありません。キャッシングのベスト候補は頻繁に読み込まれますが頻繁に変更されることはなく、あまり多くはありません。 HibernateのSQLログを有効にして、 "SELECT * FROM my_entity_table WHERE ID =?"クエリは最も頻繁に実行され、エンティティキャッシングの候補になる可能性があります。 2)実装は、あなたが行ったように、プロパティを介して設定されます。注釈は、使用する実装に関係なく同じです。実装によっては、キャッシュ・ストラテジをサポートしないものもあります。私の答えに掲載されたリンクは、すべての実装機能をリストしています。 – ChssPly76

+0

クエリキャッシュの最新のドキュメントは次のとおりです:[Hibernate 4.3](http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch20.html#performance-querycache-regions) –

4

セカンドレベルとクエリキャッシュが利用できるようになりますあなたの設定プロジェクトで使用するには、特定のエンティティ、コレクション、およびクエリに対して有効にする必要があります。これには、理解が必要なトレードオフがあるため、慎重な計画が必要です。一般に、第2レベルキャッシュとクエリキャッシュは、読み取り専用または読み取り主体のデータに適していますが、揮発性データには適していません。まだ所有していない場合は、Java Persistence with Hibernateのコピーを受け取ることをおすすめします。それは主題の非常によい扱いを持っています。

+0

答えはTanxですが、より迅速な情報が必要です。 – Am1rr3zA

関連する問題