Hibernate框架後續

2022-09-16 19:00:16 字數 2653 閱讀 1834

而關聯式資料庫按照主鍵來區分一條記錄

在hibernate中使用oid來建立記憶體中的物件和資料庫中記錄對應的關係

????什麼是oid

答:oid就是持久化類(student)與資料庫主鍵表對應屬性,用唯一來區分持久化物件

2:為何要使用包裝類呢(如integer)?

因為包裝類integer可以儲存null值

我們來模仿這樣的乙個場景:「乙個學生成績為0,無法區分是參加了考試考取了0分,還是沒有成績。如果使用包裝類,資料庫就會存入null,證明該學生沒有參加考試"

二:主鍵生成策略

increment

identity

sequence:在db端生成序列

native:在db端生成序列

uuid:在應用程式端生成

assigned:在應用程式端生成

在小配置檔案hbm.xml中進行如下配置

當我們使用sequence的時候,僅僅只有oracle支援,當我們使用active的時候,無論是mysql還是oracle,都可以生成序列。

native)

採用資料庫支援自增策略, mysql就用identity 、oracle就用sequence

策略1) ---> 策略4) 要求資料庫主鍵必須為數字 ,因為只有數字才能自增 

uuid)生成乙個32位的16進製制數,在j**a應用端產生,同樣不需要程式設計師手動新增

復合主鍵,是一種特殊 assigned型別 自然主鍵 (通常需要手動指定),po類必須實現serializable介面

三:hibernate中j**a物件的三種狀態

1:瞬時狀態

2:持久狀態

3:游離狀態

詳見下圖:

贈圖一張!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

四:關於load()方法和get()方法的區別

session.load/get方法均可以根據指定的實體類和id從資料庫讀取記錄,並返回與之對應的實體物件。

其區別在於:

如果未能發現符合條件的記錄,get方法返回null,而load方法會丟擲乙個objectnotfoundexception。

load方法可返回實體的**類例項,而get方法永遠直接返回實體類。

舉個例子,**如下:

public static void gettest()

public static void getload()

當執行getload()時進入斷點除錯,當沒有啟用stu物件的時候,預設geload()方法的initialized屬性是false;target預設是null值。

當點選stu物件時,這兩種屬性啟用,initialized屬性變為true,target則為**物件存入相應的資料。

與get()的區別:

1:在立即載入物件(當hibernate在從資料庫中取得資料組裝好乙個物件後

會立即再從資料庫取得資料此物件所關聯的物件)時,如果物件存在,

load()和get()方法沒有區別,都可以取得已初始化的物件;但如果當對

象不存在且是立即載入時,使用get()方法則返回null,而使用load()則

丟擲乙個異常。因此使用load()方法時,要確認查詢的主鍵id一定是存在

的,從這一點講它沒有get方便!

2:在延遲載入物件(hibernate從資料庫中取得資料組裝好乙個物件後,

不會立即再從資料庫取得資料組裝此物件所關聯的物件,而是等到需要時,

都會從資料庫取得資料組裝此物件關聯的物件)時,get()方法仍然使用

立即載入的方式傳送sql語句,並得到已初始化的物件,而load()方法則

根本不傳送sql語句,它返回乙個**物件,直到這個物件被訪問時才被

初始化。

五:髒檢查和重新整理快取機制

贈圖一張:

解析:當事務提交時,hibernate會對session中的持久狀態的物件進行檢測,判斷物件中的資料是否發生了改變。

當記憶體中的資料發生改變時,就要將資料更新到db端

如何髒檢查:

當乙個實體類物件存入到session中時,session會為該物件的值型別生成乙份快照,當session重新整理快取的時候首先進行髒檢查,即比較物件中的資料和快照,來判斷物件中的資料是否發生了改變,如果發生了變化,session會根據髒物件的最新資料來更新db端的資料

那麼,session會在什麼時間點來重新整理快取呢

1)事務的commit

2)session.flush()方法

理解hibernate框架

只有足夠的經歷才能更好的理解乙個框架的作用。例如 之前,知道hibernate框架是用來持久化資料的。但覺得用jdbc我就可以實現了,為什麼要使用hibernate框架那麼麻煩呢。直到昨天晚上,有個外包專案。跟我正在做的很一樣,只是資料庫不同。在這種情況下,如果使用hibernate框架作持久化資料...

Hibernate框架快取

一級快取 hibernate框架一級快取的特點 1.它是hibernate自帶的,不用我們手動配置。2.它是以k v對的方式儲存資料,以key去獲得po物件。3.只在同乙個中session共享。由於是hibernate自身就帶有的,所以使用時不需要配置xml的工作,只要知道在同乙個session中的...

javaEE框架之Hibernate框架概述

一.什麼是框架?框架是軟體的半成品,已經幫你完成了部分功能 把一些不確定的東西,按框架要求,達成相應的功能 二.hibernate簡介 1.hibernate是什麼框架?1 是乙個開源的物件關係對映框架 2 對jdbc進行了非常輕量級的物件封裝 3 將pojo與資料庫表建立對映關係,是乙個全自動的o...