Hinernate2
Hiroshima持久化類與主鍵生成策略:
Hibernate持久化類(PO)的編寫規則:
1、必須提供public的無參構造
2、屬性private,有public的get/set方法
3、在PO中必須有一個標識屬性對應數據庫的主鍵-->OID
Hibernate通過OID區分不同的PO類,如果內存種有兩個相同的OID對象,那麼Hibernate會認爲是同一個對象
4、PO類的屬性儘量使用基本數據類型的包裝類
使用基本數據類型不能描述不存在概念,包裝類是對象,默認值是null
5、PO類不能使用final修飾
hibernate中get和load方法的區別:【*****】
1、get直接獲得一個持久化類型對象,立即查詢
load獲得持久化類的代理類型對象(子類),延遲策略查詢
2、get查詢不存在返回null
load查詢不存在產生異常
Hibernate的主鍵生成策略:
自然主鍵:具有業務含義
代理主鍵: 不具有業務含義【*****】
increment:
Hibernate維護,自動生成,遞增;
優點:方便跨平臺;
缺點:不適合高併發訪問
indenty:
底層數據庫維護,自動生成,遞增,-->mysql
優點:由底層數據庫維護,和Hibernate無關
缺點:只能對自動增長的數據庫有效
sequence:
底層數據庫維護,數據庫支持序列-->oracle
優點:由底層數據庫維護,和Hibernate無關
缺點:數據庫必須支持sequence
native:
匹配底層數據庫自動選擇生成策略,有Hibernate控制
優點:在項目中如果有多個數據庫可以使用
缺點:效率低
uuid:【*****】
Hibernate採用128bit算法生成,唯一
優點:與數據庫無關,方便數據庫移植,效率高,唯一
缺點:佔用空間大
assigned:
java程序生成
Hibernate持久化對象的狀態:
瞬時態(臨時態,自由態):
無OID,與數據庫信息無關聯,與Session無關聯,一般指直接new出來的對象
瞬時態-->持久態:
save saveOrUpdate
瞬時態-->託管態:
手動設置OID -->一般不會這麼做
持久態:
有OID,有Session管理,在數據庫中可能有,可能無
持久態-->瞬時態:
delete --> 被刪除後持久化對象不建議使用
持久態-->託管態:
close clear evict
託管態(遊離態,離線態):
失去與Session的關聯,有OID,在數據庫中可能有,可能無
託管態-->瞬時態
刪除OID
託管態-->持久態:
update saveOrUpdate lock(過時)
Hibernate一級緩存:Session
actionQueue 快照區
persistenceContext緩存區
Hibernate的一級緩存的目的就是爲了減少對數據庫的訪問
持久化對象具有自動更新數據庫的能力:
當事務提交,Session關閉時,向數據庫發送請求,會判斷一級緩存中的數據是否與快照一致,若不一致會發送update語句
一級緩存常用的API:
clear:清空一級緩存
evict:清空一級緩存中指定對象
refresh:重新查詢數據庫,更新一級緩存和快照
注意事項:
當對一個託管對象進行update操作時,會將託管對象轉成持久對象再操作
如果session中出現相同的OID對象,會產生異常
如果託管對象的OID在數據庫不存在,對象託管對象進行update操作時,會產生異常
-->先查再操作【*****】
如果刪除一個託管對象,託管對象會先於session關聯再刪除
-->先刪除一級緩存,再刪除數據庫數據
Hibernate的關係映射:
一對多的關係映射配置文件:(雙向配置)
多.hbm.xml:
<many-to-one name="多描述一的屬性名稱" class="一的全路徑" colume="多的外鍵名稱"/>
一.hbm.xml:
<set name="一描述多的屬性名稱">
<key column="多的外鍵名稱"/>
<one-to-many class="多的全路徑"/>
</set>
想要在保存多的同時保存關聯的一:
需要在多的一方配置 cascade="save-update"
想要在保存一的同時保存關聯的多:
需要在意的一方配置 cascade="save-update"
雙向關聯維護:
在開發的使用需要雙向配置;而在操作是隻進行單向操作-->減少資源的浪費
-->在一的一方配置inverse="true"-->由對方維護外鍵
級聯刪除:
想要刪除一的同時刪除多:
需要在一的一方配置-->cascade="delete"
從session中獲得一的對象和多的對象,想要從一的對象中刪除多:
需要在一的一方配置-->cascade="delete-orphan"
cascade的取值:
none:默認值
save-update:當底層save update或saveOrUpdare時,級聯保存臨時對象,如果是託管對象,或執行update
delete:級聯刪除
delete-orphan:刪除與當前對象解除關係的對象
all:包含了save-update delete
all-delete-orphan:包含了 delete-orphan all
擴展二級緩存:SessionFactory:
1、導入緩存jar包;
2、配置緩存文件;
3、在Hibernate核心配置文件中開啓二級緩存
Hibernate持久化類(PO)的編寫規則:
1、必須提供public的無參構造
2、屬性private,有public的get/set方法
3、在PO中必須有一個標識屬性對應數據庫的主鍵-->OID
Hibernate通過OID區分不同的PO類,如果內存種有兩個相同的OID對象,那麼Hibernate會認爲是同一個對象
4、PO類的屬性儘量使用基本數據類型的包裝類
使用基本數據類型不能描述不存在概念,包裝類是對象,默認值是null
5、PO類不能使用final修飾
hibernate中get和load方法的區別:【*****】
1、get直接獲得一個持久化類型對象,立即查詢
load獲得持久化類的代理類型對象(子類),延遲策略查詢
2、get查詢不存在返回null
load查詢不存在產生異常
Hibernate的主鍵生成策略:
自然主鍵:具有業務含義
代理主鍵: 不具有業務含義【*****】
increment:
Hibernate維護,自動生成,遞增;
優點:方便跨平臺;
缺點:不適合高併發訪問
indenty:
底層數據庫維護,自動生成,遞增,-->mysql
優點:由底層數據庫維護,和Hibernate無關
缺點:只能對自動增長的數據庫有效
sequence:
底層數據庫維護,數據庫支持序列-->oracle
優點:由底層數據庫維護,和Hibernate無關
缺點:數據庫必須支持sequence
native:
匹配底層數據庫自動選擇生成策略,有Hibernate控制
優點:在項目中如果有多個數據庫可以使用
缺點:效率低
uuid:【*****】
Hibernate採用128bit算法生成,唯一
優點:與數據庫無關,方便數據庫移植,效率高,唯一
缺點:佔用空間大
assigned:
java程序生成
Hibernate持久化對象的狀態:
瞬時態(臨時態,自由態):
無OID,與數據庫信息無關聯,與Session無關聯,一般指直接new出來的對象
瞬時態-->持久態:
save saveOrUpdate
瞬時態-->託管態:
手動設置OID -->一般不會這麼做
持久態:
有OID,有Session管理,在數據庫中可能有,可能無
持久態-->瞬時態:
delete --> 被刪除後持久化對象不建議使用
持久態-->託管態:
close clear evict
託管態(遊離態,離線態):
失去與Session的關聯,有OID,在數據庫中可能有,可能無
託管態-->瞬時態
刪除OID
託管態-->持久態:
update saveOrUpdate lock(過時)
Hibernate一級緩存:Session
actionQueue 快照區
persistenceContext緩存區
Hibernate的一級緩存的目的就是爲了減少對數據庫的訪問
持久化對象具有自動更新數據庫的能力:
當事務提交,Session關閉時,向數據庫發送請求,會判斷一級緩存中的數據是否與快照一致,若不一致會發送update語句
一級緩存常用的API:
clear:清空一級緩存
evict:清空一級緩存中指定對象
refresh:重新查詢數據庫,更新一級緩存和快照
注意事項:
當對一個託管對象進行update操作時,會將託管對象轉成持久對象再操作
如果session中出現相同的OID對象,會產生異常
如果託管對象的OID在數據庫不存在,對象託管對象進行update操作時,會產生異常
-->先查再操作【*****】
如果刪除一個託管對象,託管對象會先於session關聯再刪除
-->先刪除一級緩存,再刪除數據庫數據
Hibernate的關係映射:
一對多的關係映射配置文件:(雙向配置)
多.hbm.xml:
<many-to-one name="多描述一的屬性名稱" class="一的全路徑" colume="多的外鍵名稱"/>
一.hbm.xml:
<set name="一描述多的屬性名稱">
<key column="多的外鍵名稱"/>
<one-to-many class="多的全路徑"/>
</set>
想要在保存多的同時保存關聯的一:
需要在多的一方配置 cascade="save-update"
想要在保存一的同時保存關聯的多:
需要在意的一方配置 cascade="save-update"
雙向關聯維護:
在開發的使用需要雙向配置;而在操作是隻進行單向操作-->減少資源的浪費
-->在一的一方配置inverse="true"-->由對方維護外鍵
級聯刪除:
想要刪除一的同時刪除多:
需要在一的一方配置-->cascade="delete"
從session中獲得一的對象和多的對象,想要從一的對象中刪除多:
需要在一的一方配置-->cascade="delete-orphan"
cascade的取值:
none:默認值
save-update:當底層save update或saveOrUpdare時,級聯保存臨時對象,如果是託管對象,或執行update
delete:級聯刪除
delete-orphan:刪除與當前對象解除關係的對象
all:包含了save-update delete
all-delete-orphan:包含了 delete-orphan all
擴展二級緩存:SessionFactory:
1、導入緩存jar包;
2、配置緩存文件;
3、在Hibernate核心配置文件中開啓二級緩存
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.