主鍵生成政策
- 主鍵分類
- 生成政策
01主鍵分類
主鍵可分為自然主鍵和代理主鍵
什麼是自然主鍵?
- 主鍵本身就是表中的一個字段
- 實體中一個具體的屬性,對象本身唯一的特性
什麼是代理主鍵?
- 主鍵本身不是表中必須的一個字段
- 僅僅是額外的一個參數能夠辨別不同記錄
在實際開發當中一般采用那種主鍵?
采用代理主鍵。因為主鍵是唯一的辨別,不友善直接修改,如果主鍵就是對象的屬性比如學生學号作為主鍵,如果記錄時輸入錯了則不好去修改有悖于開閉原則。采用代理主鍵對象的所有屬性都不是主鍵,主鍵由代碼自動産生一串唯一的辨別,那麼所有屬性都是普通字段可以友善修改
02主鍵生成政策
既然要用代理主鍵,是屬性之外的,是以交給程式自動生成而不是使用者輸入
一般這個自動生成交給資料庫的自動增長來生成唯一辨別
在hibernate當中,為了減少程式的編寫,内部提供了多種的主鍵生成政策
increment自動增加政策(整型) | 查出最大的主鍵然後給他加1,就是新插入記錄的主鍵,由程式設定不支援多線程 |
identity自動增長(整型) | 使用是資料庫底層的增長政策,由資料庫設定 |
sequence自動增長(整型) | 采用序列的方式 |
uuid(字元) | 使用hibernate中随機生成字元串的主鍵 |
native本地政策 | 在identity和sequence自動切換 |
assigned | hibernate不會幫你管理主鍵自己手動調用或通過程式來去生成主鍵,通過手動設定 |
mysql自動增長用的是identity,oracle的支援的是sequence。一般使用增長政策用native就好
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLi0zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwkzX39GZhh2csATMflHLwEzX4xSZz91ZsADMx8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PnVGcq5yNiBzNjZmM1MWZ0YGZxQTYzYzYwMTZwYmNjVjZhhDNl9CXyAzLclDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL2M3Lc9CX6MHc0RHaiojIsJye.jpeg)
它,