天天看點

主鍵生成政策

主鍵生成政策

  1. 主鍵分類
  2. 生成政策

01主鍵分類

主鍵可分為自然主鍵和代理主鍵

什麼是自然主鍵?

  • 主鍵本身就是表中的一個字段
  • 實體中一個具體的屬性,對象本身唯一的特性

什麼是代理主鍵?

  • 主鍵本身不是表中必須的一個字段
  • 僅僅是額外的一個參數能夠辨別不同記錄

在實際開發當中一般采用那種主鍵?

    采用代理主鍵。因為主鍵是唯一的辨別,不友善直接修改,如果主鍵就是對象的屬性比如學生學号作為主鍵,如果記錄時輸入錯了則不好去修改有悖于開閉原則。采用代理主鍵對象的所有屬性都不是主鍵,主鍵由代碼自動産生一串唯一的辨別,那麼所有屬性都是普通字段可以友善修改

02主鍵生成政策

既然要用代理主鍵,是屬性之外的,是以交給程式自動生成而不是使用者輸入

一般這個自動生成交給資料庫的自動增長來生成唯一辨別

在hibernate當中,為了減少程式的編寫,内部提供了多種的主鍵生成政策

increment自動增加政策(整型) 查出最大的主鍵然後給他加1,就是新插入記錄的主鍵,由程式設定不支援多線程
identity自動增長(整型) 使用是資料庫底層的增長政策,由資料庫設定
sequence自動增長(整型) 采用序列的方式
uuid(字元) 使用hibernate中随機生成字元串的主鍵
native本地政策 在identity和sequence自動切換
assigned hibernate不會幫你管理主鍵自己手動調用或通過程式來去生成主鍵,通過手動設定

mysql自動增長用的是identity,oracle的支援的是sequence。一般使用增長政策用native就好

主鍵生成政策

它,