概要
JPA(EntityManager) + Hibernate + Ehcache(二次キャッシュ) + Seasar2 の組み合わせで利用しているとき、
二次キャッシュを利用せずにエンティティを生成 (insert) する方法について解説します。
想定するケース
- Ehcache を使い、マルチキャストにより LAN 内で二次キャッシュを共有している。
- あるエンティティは @Cache アノテーションにより、二次キャッシュを利用している。
- 大量にそのエンティティを追加するときは二次キャッシュを利用したくない。
この場合、最も簡単かつ推奨する方法は
- 二次キャッシュを利用しない設定で構築した Web サーバまたはコマンドライン・プログラムを用意し、そこで処理を実行する。
ですが、なんらかの理由で二次キャッシュを利用した web サーバ上で処理を実行しなければならない場合、以下の手順で実現できます。
設定手順
META-INF/persistence.xml に記述を追加
META-INF/persistence.xml で既存の persistenceUnit タグをコピーし、二次キャッシュを利用しない設定を行います。
具体的には、以下の修正を行います。
- persistence-unit タグの name 属性を db1nocache_persistenceUnit のような名前に変更してください。
- 利用するエンティティを明示的に class タグで宣言してください。中で別のエンティティを参照している場合、それらもすべて宣言する必要があります。
- hibernate.cache.use_query_cache を false に設定。
- hibernate.cache.use_second_level_cache を false に設定。
jpa_nocache.dicon を作成
jpa.dicon から jpa_nocache.dicon を呼び出す
jpa.dicon の components タグの後ろに、次の記述を追加します。
利用手順
Service クラスの中で次のように利用します。