一、Hibernate對象狀态
1、狀态介紹
(1)瞬時态:transient,session沒有緩存對象,資料庫也沒有對應記錄
(2)持久态:persistent,session緩存對象,資料庫最終會有資料
(3)遊離态(脫管态)detached,session沒有緩存對象,資料庫有對應的記錄
2、狀态之間的轉換
二、Hibernate一級緩存
1、一級緩存
一級緩存又稱為session級别的緩存。當獲得一次會話(session),hibernate在session中建立多個集合(map),用于存放操作資料(PO對象),為程式優化服務,如果之後需要相應的資料,hibernate優先從session緩存中擷取,如果有就使用;如果沒有再查詢資料庫。當session關閉時,一級緩存銷毀。
2、證明一級緩存代碼
public void demo2(){
//證明一級緩存
Session session=factory.openSession();
session.beginTransaction();
//查詢id=1
User user=(User)session.get(User.class,);
System.out.println(user);
//再查詢--不執行select語句,将從一級緩存獲得
User user2=(User)session.get(User.class,);
System.out.println(user2);
//送出事務
session.getTransaction.commit();
//關閉資源
session.close();
}
3、移除一級緩存代碼
public void demo2(){
//清除緩存
Session session=factory.openSession();
//開啟事務
session.beginTransaction();
User user=(User)session.get(User.class,)
System.out.println(user);
//清除
//session.clear();
session.evict(user);
//一級緩存中沒有緩存對象,從資料庫中直接查詢資料
User user2=(User)session.get(User.class,);
System.out.println(user2);
//送出事務
session.getTransaction().commit();
//關閉資源
session.close();
}
三、Hibernate一級緩存快照
1、快照介紹
與一級緩存一樣的存放位置,對一級緩存資料備份。保證資料庫的資料與 一級緩存的資料必須一緻。如果一級緩存修改了,在執行commit送出時,将自動重新整理一級緩存,執行update語句,将一級緩存的資料更新到資料庫。
2、refresh 重新整理
refresh 保證 一級緩存的資料 與 資料庫的資料 保持一緻。将執行select語句查詢資料庫,将一級緩存中的資料覆寫掉。隻要執行refresh都将執行select語句
public void demo3(){
//重新整理
Session session=factory.openSession();
session.beginTransaction();
User user=(User)session.get(User.class,);
System.out.println(user);
//重新整理
session.refresh(user);
session.getTransaction().commit();
session.close();
}