Hibernate學習-11:持久化物件狀態及狀態轉換、持久態物件自動更新資料庫
阿新 • • 發佈:2019-02-03
持久化類:就是一個實體類 與 資料庫表建立了對映.
Hibernate為了方便管理持久化類,將持久化類分成了三種狀態.
瞬時態 transient :(臨時態)特點:持久化物件沒有唯一標識OID.沒有納入Session的管理
持久態 persistent :特點:持久化物件有唯一標識OID.已經納入到Session的管理
脫管態 detached :(離線態)特點:持久化物件有唯一標識OID,沒有納入到Session管理
1、區分三種持久化物件的狀態
請看下面的例子:
@Test // 區分持久化物件的三種狀態: public void demo1(){ // 1.建立Session Session session = HibernateUtils.openSession(); // 2.開啟事務 Transaction tx = session.beginTransaction(); // 向資料庫中儲存一本圖書: Book book = new Book(); // 瞬時態:沒有唯一標識OID,沒有與session關聯. book.setName("Hiernate開發"); book.setAuthor("孫XX"); book.setPrice(65d); session.save(book); // 持久態:有唯一標識OID,與session關聯. // 3.事務提交 tx.commit(); // 4.釋放資源 session.close(); book.setName("Struts2開發"); // 脫管態:有唯一的標識,沒有與session關聯. }
2、三種狀態物件轉換:
瞬時態:
獲得:
Book book = new Book();
瞬時態——>持久態:
save(book);
save()/saveOrUpdate();
瞬時態——>脫管態:
book.setId(1);
持久態:
獲得:
Book book = (Book)session.get(Book.class,1);
get()/load()/find()/iterate();
持久態——>瞬時態:
delete(book);
***特殊狀態:刪除態.(被刪除的物件,不建議去使用.)持久態——>脫管態:
session.close();
close()/clear()/evict();
脫管態:
獲得:
Book book = new Book();
book.setId(1);
脫管態——>持久態:
session.update();
update()/saveOrUpdate()/lock()
脫管態——>瞬時態:
book.setId(null);
持久態物件有自動更新資料庫的能力,例如:
@Test // 測試持久態的物件自動更新資料庫 public void demo2(){ // 1.建立Session Session session = HibernateUtils.openSession(); // 2.開啟事務 Transaction tx = session.beginTransaction(); // 獲得一個持久態的物件. Book book = (Book) session.get(Book.class, 1); book.setName("Struts2開發"); // session.update(book); // 3.提交事務 tx.commit(); // 4.關閉資源 session.close(); }
****** 自動更新資料庫的能力依賴了Hibernate的一級快取.稍後會給大家介紹一級快取和二級快取的相關內容。