1. 程式人生 > >Hibernate持久化類概述

Hibernate持久化類概述

什麼是持久化類

  • 持久化:將記憶體中的一個物件持久化到資料庫中的過程。
  • 持久化類: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)