Hibernate持久化類概述
阿新 • • 發佈:2018-12-24
什麼是持久化類
- 持久化:將記憶體中的一個物件持久化到資料庫中的過程。
- 持久化類:Hibernate是一個ORM框架,因此當一個Java物件與資料庫的表建立了對映關係時,那麼在這個類在Hibernate中稱為是持久化類,即:持久化類=Java類+對映檔案
持久化類的編寫規則
- 對持久化類提供一個無引數的構造方法:Hibernate底層需要使用反射生成物件例項;
- 屬性私有,對私有屬性提供public的get和set方法:Hibernate中獲取,設定物件的值
- 對持久化類提供一個唯一標識OID與資料庫中的主鍵對應:Java中通過物件的地址區分是否是同一個物件,資料庫中通過主鍵確定是否是同一個記錄,在Hibernate中通過持久化類的OID的屬性區分是否為同一個物件
- 持久化類中的屬性儘量使用包裝類型別:因為基本資料型別預設值為0,就會產生歧義
- 持久化類不要使用final修飾:延遲載入本身是Hibernate的一個優化手段。返回的是一個代理物件(Javassist可以對沒有實現介面的類產生代理—使用了非常底層的位元組碼物件增強技術,繼承這個類進行代理)。如果不能被繼承,無法產生代理物件,延遲載入也就失效,因此session的get和load方法沒有任何區別(debug除錯判斷控制檯的列印情況);
持久化類示例
package com.itykd.domain;
public class Customer {
private Long cust_id;
private String cust_name;
public Customer() {
super();
}
public Long getCust_id() {
return cust_id;
}
public void setCust_id(Long cust_id) {
this.cust_id = cust_id;
}
public String getCust_name() {
return cust_name;
}
public void setCust_name(String cust_name) {
this.cust_name = cust_name;
}
}
持久化類的三種狀態
Hibernate為了更好地管理持久化類,將持久化類分成三種狀態。
1 瞬時態
這種物件沒有唯一的標識OID,沒有被session管理
2 持久態
這個物件有唯一標識OID,被session管理
3 脫管態
這個物件有唯一標識OID,沒有被session管理
三種狀態的相互轉換
瞬時態物件
1 獲得
Customer customer = new Customer();
2 狀態轉換
瞬時—>持久
save(Object obj);
saveorUpdate(Object obj);
瞬時—>脫管
customer.set_Id(1l);
持久態物件(持久化類持久態物件能夠自動更新資料庫)
1 獲得
get() load() find() iterate()
Customer customer = session.get(Customer.class,1l);
Customer customer = session.load(Customer.class,1l);
2 狀態轉換
持久—>瞬時
delete();
持久—>脫管
close() clear() evict(Object obj)
脫管態物件
1 獲得
Customer customer = new Customer();
customer.set_Id(1l);
2 狀態轉換
脫管—>持久
update(Object obj);
saveorUpdate(Object obj);
脫管—>瞬時
close() clear() evict(Object obj)