Hibernate 主鍵的生成策略

Kunaly發表於2018-02-06

首先區分什麼是自然主鍵和代理主鍵

1. 建立表的時候
        * 自然主鍵:物件本身的一個屬性.建立一個人員表,每個人都有一個身份證號.(唯一的)使用身份證號作為表的主鍵.自然主鍵.(開發中不會使用這種方式)
        * 代理主鍵:不是物件本身的一個屬性.建立一個人員表,為每個人員單獨建立一個欄位.用這個欄位作為主鍵.代理主鍵.(開發中推薦使用這種方式)
2. 建立表的時候儘量使用代理主鍵建立表

主鍵的生成策略

1. increment:適用於short,int,long作為主鍵.不是使用的資料庫自動增長機制.
        * Hibernate中提供的一種增長機制.
        * 先進行查詢 :select max(id) from user;
        * 再進行插入 :獲得最大值+1作為新的記錄的主鍵.
        * 問題:不能在叢集環境下或者有併發訪問的情況下使用.
2. identity:適用於short,int,long作為主鍵。但是這個必須使用在有自動增長資料庫中.採用的是資料庫底層的自動增長機制.
        * 底層使用的是資料庫的自動增長(auto_increment).像Oracle資料庫沒有自動增長.
3. sequence:適用於short,int,long作為主鍵.底層使用的是序列的增長方式                                                                           

       * Oracle資料庫底層沒有自動增長,想自動增長需要使用序列.                                                                                      

4. uuid:適用於char,varchar型別的作為主鍵.   * 使用隨機的字串作為主鍵.

5. native:本地策略.根據底層的資料庫不同,自動選擇適用於該種資料庫的生成策略.(short,int,long)
            * 如果底層使用的MySQL資料庫:相當於identity.
            * 如果底層使用Oracle資料庫:相當於sequence.
6. assigned:主鍵的生成不用Hibernate管理了.必須手動設定主鍵.

     




相關文章