Hibernateのキャッシュ
休止状態のキャッシュは、データベースクエリのキャッシュデータのニーズがそうすることを行く必要がないときに、データベースへの頻繁なアクセスを避けるために、Hibernateはメモリ内に格納されたデータへのデータベースクエリから提供されたプログラムを最適化するための方法ですアクセス速度を向上させることができますが、ためにも発生するデータベースに頻繁にアクセスのコンピュータのパフォーマンスの消費を避けるためだけではなく。
キャッシュとL2キャッシュ:Hibernateはキャッシュ、2つのレベルを提供します。
キャッシュ ;:セッション・キャッシュは、レベルのキャッシュ、セッションのライフサイクルは、Hibernateのキャッシュが自動的に開かれる場合、閉じられていないと一致している
二次キャッシュ、二次キャッシュはSessionFatoryレベルのキャッシュ、その命です。どこ期間のSessionFactoryと一致し、休止状態の二次キャッシュはデフォルトでオンになっていない、あなたはそれをオンに設定することができます。
セッションの影響メソッドのキャッシュ:
- 近い():クローズ現在のセッションは、対応するキャッシュがクリアされます。
- クリア():現在のセッションでのすべてのキャッシュを空にします。
- 追い出し(オブジェクトobj):キャッシュを空にしているオブジェクトを指定します。
キャッシュをテストすることが存在します:
package cn.jingpengchong.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import cn.jingpengchong.pojo.Customer;
public class Test {
public static void main(String[] args) {
//1、加载配置文件
Configuration configure = new Configuration().configure();
//2、创建一个SessionFactory
SessionFactory factory = configure.buildSessionFactory();
//3、根据SessionFactory获得一个Session对象
Session session = factory.openSession();
//4、手动开启事务
Transaction transaction = session.beginTransaction();
//5、执行增删改查等操作
Customer customer1 = session.get(Customer.class, 3l);
System.out.println(customer1);
Customer customer2 = session.get(Customer.class, 3l);
System.out.println(customer2);
System.out.println("是否为同一个对象:" + (customer1 == customer2));
//6、提交事务
transaction.commit();
//7、释放资源
session.close();
factory.close();
}
}
キャッシュなしならば、我々はプログラムの結果を尊重簡単であるが、理由は次のような結果とキャッシュの必要があります:
分析原理データベースには、自動的にオブジェクトの永続状態を更新:
オブジェクトはブログ記事で言及した永続状態は自動的にデータベースを更新しますその理由は、第一レベルのキャッシュ休止ので、最初のクエリが実際にあるときにオブジェクトが緩衝地帯で見つかったとスナップショットの上に置く休止状態です。変更されたデータは、エリアをキャッシュし、キャッシュを見つけ、トランザクションがコミットされたとき、それは更新を実行しますので、スナップショット領域が、同じではありませんされ、データを変更しない場合は、トランザクションがコミットされ、スナップショットバッファゾーンは、まだそれは更新されません同じであるときデータベース。