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" region="RegionName" include="all|non-lazy" />
usage (必須) キャッシング戦略を指定します: transactional 、 read-write 、 nonstrict-read-write または read-only
| |
region (オプション:クラスまたはコレクションのロール名のデフォルト) 2次キャッシュ領域の名前を指定します
| |
include (オプション:all に対してデフォルト) non-lazy は、 属性レベルの lazy フェチが有効になっている場合 lazy="true" でマッピングされるエンティティのプロパティはキャッシュされなくてもよいことを指定します。
|
または、
hibernate.cfg.xml
に <class-cache>
と <collection-cache>
要素を指定することも出来ます。
usage
属性は キャッシュの並列性戦略 を指定します。