19.2. 2次レベルキャッシュ

Hibernate のSession は永続データのトランザクションレベルのキャッシュです。class-by-class と collection-by-collection ごとの、クラスタレベルや JVM レベル ( SessionFactory レベル)のキャッシュを設定することが出来ます。クラスタ化されたキャッシュにつなぐことさえ出来ます。キャッシュは他のアプリケーションによる永続層の変更を考慮しない点に注意してください。キャッシュデータを定期的に無効化する設定は出来ます。
Hibernate は、hibernate.cache.provider_class プロパティを利用して org.hibernate.cache.CacheProvider を実装するクラス名を指定することで、どのキャッシュ実装を使用するか指示できます。Hibernate では、以下に示された複数のオープンソースのキャッシュプロバイダが組み込みで統合されています。また、上記のように、独自のキャッシュプロバイダを実装して組み込むことも出来ます。

表19.1 キャッシュプロバイダ

キャッシュ プロバイダクラス タイプ クラスタセーフ クエリキャッシュのサポート
Hashtable(本番利用向けではありません) org.hibernate.cache.HashtableCacheProvider メモリ yes
EHCache org.hibernate.cache.EhCacheProvider メモリ、ディスク yes
OSCache org.hibernate.cache.OSCacheProvider メモリ、ディスク yes
SwarmCache org.hibernate.cache.SwarmCacheProvider クラスタ(ip マルチキャスト) yes(クラスタ無効化)
JBoss Cache 1.x org.hibernate.cache.TreeCacheProvider クラスタ(ip マルチキャスト)、トランザクショナル yes(複製) yes(時刻同期が必要)
JBoss Cache 2 org.hibernate.cache.jbc2.JBossCacheRegionFactory クラスタ(ip マルチキャスト)、トランザクショナル yes(複製または無効化) yes(時刻同期が必要)

19.2.1. キャッシュのマッピング

クラスやコレクションのマッピングの <cache> 要素は以下の形式です。
<cache 
    usage="transactional|read-write|nonstrict-read-write|read-only"   1
    region="RegionName"                                               2
    include="all|non-lazy"                                            3
/>

1

usage (必須) キャッシング戦略を指定します: transactionalread-writenonstrict-read-write または read-only

2

region (オプション:クラスまたはコレクションのロール名のデフォルト) 2次キャッシュ領域の名前を指定します

3

include (オプション:all に対してデフォルト) non-lazy は、 属性レベルの lazy フェチが有効になっている場合 lazy="true" でマッピングされるエンティティのプロパティはキャッシュされなくてもよいことを指定します。
または、 hibernate.cfg.xml<class-cache><collection-cache> 要素を指定することも出来ます。
usage 属性は キャッシュの並列性戦略 を指定します。