hibernate的核心思想就是將以前對單個字段的操做變爲操做一個對象,使用了ORM(Object relation mapping)對象關係映射的思想mysql
· 在hibernate中對數據庫特殊字段的有着具體配置,不一樣的數據庫有不一樣的主鍵生成策略 sql
映射到數據的實體對象也須要有如下幾點須要注意數據庫
主鍵的shengt生成策略、 緩存
主鍵的生成有倆個位置能夠生成 : JAVA 數據庫session
天然主鍵: 跟業務有關 參與了業務邏輯主要用來區分不一樣數據 對象 保證數據不重複 oracle
訂單表(order_id) 支付 將oid發送了給第三方 第三方響應回來order_id數據app
代理主鍵: 跟業務無關 主要用來區分不一樣數據 對象 保證數據不重複ide
JAVAsqlserver
手動插入ui
assigned : 手動插入主鍵
自動插入
increment: 由hibernate 自動查詢數據庫增加 不適合集羣(多個計算機組合成的效果)
每次查詢這個表的最大值 加+1 賦值
uuid : 自動產生一個隨機的id值
數據庫
native : 根據不一樣數據的底層自動增加
identity: mysql的自動增加(auto_increment) 支持自動增加字段 db2 sqlserver
sequence:oracle 自增加序列
固然在操做持久化對象的時候,持久化對象也存在三種不一樣的狀態
對象 在建立到得到 到 session 其實經歷了三種狀態
* 瞬時態: 建立一個對象 瞬時態 沒有OID 跟session沒有關係
* 持久態: 得到一個對象 (重點) 有OID 跟session有關係
* 遊離態或者脫管態:session關閉後 叫遊離態 有OID 跟session不要緊
hibernate的一級緩存和快照機制的原理示意圖
hibernate對數據庫的操做都須要開啓事務
事務指的是 邏輯的一組操做,要麼所有成功,要麼所有失敗
事務的特性:
A 原子性: 一組操做 不可再分割
C 一致性: 事務的先後數據保證一致
I 隔離性(lsolation): 多事務之間的操做
D 持久性: 事務不可逆
隔離問題:
髒讀 : 一個事務讀到了另外一個事務沒有提交的數據
不可重複讀: 一個事務讀到了另外一個事務已提交的數據(update)
虛讀/幻讀: 一個事務讀到了另外一個事務已提交的數據(insert)
解決方案:
讀未提交 不解決任何問題
讀已提交 解決髒讀 Oracle默認隔離級別
可重複讀 解決髒讀 和 不可重複讀問題 mysql的默認隔離級別
串行化 解決三個問題
對事務的配置
在hibernate的核心配置文件中,
openSession() 表示 每一次調用 得到一個新的session對象
getCurrentSession() 表示得到當前線程的session對象 等效之前的將connection 綁定的到當前線程上
hibernate也存在其餘的檢索方式,可是使用起來要因環境而異