Hibernate 生成主鍵的幾種策略

2021-04-12 11:37:59 字數 1370 閱讀 6069

在進行資料庫設計的時候,經常會遇到主鍵如何設定的問題,有的資料庫本來就提供了乙個生成主鍵的策略,比如ms的access,ms sql server,它們都提供一種叫自增長型別,一般是長整型,從1開始,每插入一條記錄,該值就自動加1,但是會遇到乙個問題,當刪除乙個記錄, 該值就不會再用,而在oracle中,並沒有提供這種型別,一般用使用sequence來定義乙個主鍵,當然,也可以用程式來控制他,而在hibernate中,提供許多種生成主鍵的策略,主要有以下幾種:

1) assigned

主鍵由外部程式負責生成,無需hibernate參與,處理起來有些麻煩,便是很靈活!

2) hilo

使用乙個高/低位演算法來高效的生成long, short或者 int型別的識別符號。給定乙個表和字段(預設分別是是hibernate_unique_key 和next)作為高位值得**。高/低位演算法生成的識別符號只在乙個特定的資料庫中是唯一的。在使用jta獲得的連線或者使用者自行提供的連線中,不要使用這種生成器。

3) seqhilo

與hilo 類似,通過hi/lo 演算法實現的主鍵生成機制,只是主鍵歷史

狀態儲存在sequence中,適用於支援sequence的資料庫,如oracle。

4) increment

主鍵按數值順序遞增。此方式的實現機制為在當前應用例項中維持

乙個變數,以儲存著當前的最大值,之後每次需要生成主鍵的時候

將此值加1作為主鍵。

這種方式可能產生的問題是:如果當前有多個例項訪問同乙個資料

庫,那麼由於各個例項各自維護主鍵狀態,不同例項可能生成同樣

的主鍵,從而造成主鍵重複異常。因此,如果同一資料庫有多個實

例訪問,此方式必須避免使用。

5) identity

採用資料庫提供的主鍵生成機制。如db2、sql server、mysql

中的主鍵生成機制。

6) sequence

採用資料庫提供的sequence 機制生成主鍵。如oralce 中的

sequence。

7) native

由hibernate根據底層資料庫自行判斷採用identity、hilo、sequence

其中一種作為主鍵生成方式。

8) uuid.hex

由hibernate基於128 位唯一值產生演算法生成16 進製數值(編碼後

以長度32 的字串表示)作為主鍵。

9) uuid.string

與uuid.hex 類似,只是生成的主鍵未進行編碼(長度16)。在某些

資料庫中可能出現問題(如postgresql)。

10) foreign

使用外部表的字段作為主鍵。

一般而言,利用uuid.hex方式生成主鍵將提供最好的效能和資料庫平台適

應性。

hibernate主鍵生成

hibernate的主鍵生成器 generator元素 表示了乙個主鍵生成器,它用來為持久化類例項生成唯一的標識 1.1 程式設計師自己控制 assigned 1.2 資料庫控制 identity 標識列 自動增長 sequence 1.3 hibernate控制 increment uuid uu...

Hibernate主鍵生成策略

hibernate主鍵生成策略 1 自動增長identity 適用於mysql db2 ms sql server,採用資料庫生成的主鍵,用於為long short int型別生成唯一標識 使用sql server 和 mysql 的自增欄位,這個方法不能放到 oracle 中,oracle 不支援...

Hibernate主鍵生成策略

1 自動增長identity 適用於mysql db2 ms sql server,採用資料庫生成的主鍵,用於為long short int型別生成唯一標識 使用sql server 和 mysql 的自增欄位,這個方法不能放到 oracle 中,oracle 不支援自增字段,要設定sequence...