Hibernate 2級キャッシュ例(4.2 Final版)
もっと読む
Hbernate 4.2中のキャッシュ
1、hibernateの中のキャッシュは一級キャッシュと二級キャッシュとクエリーキャッシュに分けられます。一級キャッシュ:セッションレベルのキャッシュ 級キャッシュ:Session Factoryレベルのキャッシュ クエリーキャッシュ 2、一級キャッシュ
3、二級キャッシュ(Hibernateでは二級キャッシュを使用)
(一)対応するJarパッケージを導入する ehcache-core- ヒベルナツ-ehcache-42.2.0.Final.jar sf 4 j-appi-1.6.1.jar (二)キャッシュ設定を開き、EhCacheを例に実験を行うは、クエリーキャッシュを設定し、クエリーキャッシュは、二級キャッシュをベースにして である。
trueクエリテスト(setCachable(true)方法を使用しなければならない)
Hbernate 4.2中のキャッシュ
1、hibernateの中のキャッシュは一級キャッシュと二級キャッシュとクエリーキャッシュに分けられます。
@Test
public void testCache() {
Session s = sf.getCurrentSession();
s.beginTransaction();
Category c = (Category)s.load(Category.class, 1);
System.out.println(c.getName());
Category c1 = (Category)s.load(Category.class, 1);
System.out.println(c1.getName());
s.getTransaction().commit();
Session s2 = sf.getCurrentSession();
s2.beginTransaction();
Category c2 = (Category)s2.load(Category.class, 1);
System.out.println(c2.getName());
s2.getTransaction().commit();
}
二級キャッシュを使用しない場合、一つのSessionで一つのオブジェクトをロードして二回だけ調べます。一つのSessionで一つのオブジェクトをロードしたら、一回だけ調べます。違うSessionで各Loadに一回ずつ登録すれば、二回のクエリーが行われます。つまり、第二のセッションは最初のセッションのバッファにアクセスできません。3、二級キャッシュ(Hibernateでは二級キャッシュを使用)
(一)対応するJarパッケージを導入する
true
org.hibernate.cache.ehcache.EhCacheRegionFactory
(三)キャッシュ対象を設定し、Category類に注釈@Cacheを加える@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class Category {
(四)二級キャッシュをテストします。この時は二つの異なるSessionの中でLoadを行っても一回しか確認できません。@Test
public void testCache2() {
Session s = sf.getCurrentSession();
s.beginTransaction();
Category c = (Category)s.load(Category.class, 1);
System.out.println(c.getName());
s.getTransaction().commit();
Session s2 = sf.getCurrentSession();
s2.beginTransaction();
Category c2 = (Category)s2.load(Category.class, 1);
System.out.println(c2.getName());
s2.getTransaction().commit();
}
4、クエリーキャッシュtrue
@Test
public void testQueryCache() {
Session s = sf.getCurrentSession();
s.beginTransaction();
List cs = (List)s.createQuery("from Category").setCacheable(true).list();
for(Category c : cs) {
System.out.println(c.getName());
}
List cs2 = (List)s.createQuery("from Category").setCacheable(true).list();
for(Category c : cs2) {
System.out.println(c.getName());
}
s.getTransaction().commit();
Session s2 = sf.getCurrentSession();
s2.beginTransaction();
List cs3 = (List)s2.createQuery("from Category").setCacheable(true).list();
for(Category c : cs3) {
System.out.println(c.getName());
}
s2.getTransaction().commit();
}