hibernate中持久化類及主鍵生成策略

Hibernate 中持久化類:

1、什麼是持久化類:

  • 持久化:將內存中的一個對象持久化到數據庫中,hibernate就是用來持久化的框架;
  • 持久化類:一個java文件和數據庫表建立了映射關係,那麼這個類在hibernate中就稱爲持久化類。簡單的說持久化類=Java類+映射文件;

2、持久化類的編寫規則:

  • 對持久化類提供一個無參數的構造函數;(hibernate需要通過反射來生成對象的實例)
  • 屬性私有化,提供公有的get和set方法;(hibernate 要通過該方法來獲取和設置對象的值)
  • 對持久化類提供一個唯一標識OID與數據庫主鍵對應;(Java中通過對象的地址來區分是否是同一個對象,數據庫中通過OID來區分是否是同一條記錄,在hibernate中通過對象的OID來區分是否是同一個對象)
  • 持久化類中儘量使用包裝類類型;  (因爲基本數據類型默認值是0,0會有歧義,例如該項是沒有值還是值爲0,而包裝類類型默認值 是null,則不存在歧義)
  • 持久化類不要用finall修飾;  (因爲延遲加載本來就是hibernate的一種優化手段,返回的是一個代理對象(javassist可以對沒有實現接口的類產生代理,jdk動態代理只能對實現了接口的類進行代理,javassist使用了非常底層的字節碼增強技術,繼承持久化類來產生代理對象的,如果用final修飾則該類不能被繼承,則不會延遲加載,hibernate的get方法和load方法作用會完全相同)

3、持久化類的三種狀態

  • 瞬時態:這種對象沒有唯一的標識OID,沒有被session管理;
  • 持久態:有唯一的標識OID,且被session管理;(持久態的對象會自動更新到數據庫中
  • 脫管態:有唯一的標識OID,但是不被session管理;

例如:Student stu=new Student();       stu處於瞬時態

           stu.setId("1");

           session.save(stu);                      此時stu處於持久態

           tx.commit();

           session.close();                          此時stu處於託管態   

Hibernate 的主鍵生成策略

1、主鍵的分類:

  • 自然主鍵:主鍵的本身就是表中的一個字段;
  • 代理主鍵:主鍵本身不是表中的一個字段;

2、主鍵生成策略:

  • increment:    hibernate提供的自增長機制,適用於short,int,long類型的主鍵,在單線程中使用;(原理:select max(id) from 表作爲下一條記錄的主鍵)
  • identity:     適用於short,int,long類型的主鍵,使用的是數據庫底層的自增長機制,適用於有自增長機制的數據庫(Mysql),Oracle沒有自增長;
  • sequence:   適用於short,int,long類型的主鍵,採用的是序列的方式;(Oracle支持序列)
  • uuid:        適用於字符串類型的主鍵,它是由hibernate中隨機生成的字符串主鍵;
  • native:    本地策略;可以在identity和sequence之間自由切換;
  • assigned:   hibernate放棄外鍵的管理,需要手動編寫程序或用戶自己設置;
  • foreign:    外部的。一對一的關聯映射下使用;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章