mysql自定義主鍵生成策略 主鍵生成策略

2021-10-18 03:12:32 字數 1425 閱讀 8207

1、jpa提供的四種標準用法為table,sequence,identity,auto。

a,table:使用乙個特定的資料庫**來儲存主鍵。

b,sequence:根據底層資料庫的序列來生成主鍵,條件是資料庫支援序列。

c,identity:主鍵由資料庫自動生成(主要是自動增長型)

d,auto:主鍵由程式控制。

2、hibernate主鍵策略生成器

hibernate提供多種主鍵生成策略,有點是類似於jpa,以下是hibernate特有的:

native:對於 oracle 採用 sequence方式,對於mysql 和 sql server 採用identity(自增主鍵生成機制),native就是將主鍵的生成工作交由資料庫完成,hibernate不管(常用);

uuid:採用128位的uuid演算法生成主鍵,uuid被編碼為乙個32位16進製制數字的字串,占用空間大(字串型別);

hilo:使用hilo生成策略,要在資料庫中建立一張額外的表,預設表名為hibernate_unique_key,預設欄位為integer型別,名稱是next_hi(比較少用);

assigned:在插入資料的時候主鍵由程式處理(很常用),這是 元素沒有指定時的預設生成策略。等同於jpa中的auto;

identity:使用sql server 和 mysql 的自增欄位,這個方法不能放到 oracle 中,oracle 不支援自增字段,要設定sequence(mysql 和 sql server 中很常用),等同於jpa中的indentity;

select:使用觸發器生成主鍵(主要用於早期的資料庫主鍵生成機制,少用);

sequence:呼叫底層資料庫的序列來生成主鍵,要設定序列名,不然hibernate無法找到;

seqhilo:通過hilo演算法實現,但是主鍵歷史儲存在sequence中,適用於支援 sequence 的資料庫,如 oracle(比較少用);

increment:插入資料的時候hibernate會給主鍵新增乙個自增的主鍵,但是乙個hibernate例項就維護乙個計數器,所以在多個例項執行的時候不能使用這個方法;

guid:採用資料庫底層的guid演算法機制,對應mysql的uuid()函式,sql server的newid()函式,oracle的rawtohex(sys_guid())函式等;

uuid.hex:看uuid,建議用uuid替換;

sequence-identity:sequence策略的擴充套件,採用立即檢索策略來獲取sequence值,需要jdbc3.0和jdk4以上(含1.4)版本;

hibernate提供了多種生成器供選擇,基於annotation的方式通過@genericgenerator實現。

hibernate每種主鍵生成策略提供介面org.hibernate.id.identifiergenerator的實現類,如果要實現自定義的主鍵生成策略也必須實現此介面。

原文:

Hibernate自定義主鍵生成策略

在複習hibernate的時候,又遇到了mysql自增時,批量新增出問題的情況 暫時寫了乙個可以實現mysql自增主鍵生成器的 執行效率很差勁 嘻嘻 但是功能都有 conn.close catch sqlexception e long oldid cacheentitypkmax.get obj....

Sharding JDBC 自定義主鍵生成器

官方文件分布式主鍵 sharding jdbc提供了兩種主鍵生成策略uuid snowflake,預設使用snowflake,還抽離出分布式主鍵生成器的介面org.apache.shardingsphere.spi.keygen.shardingkeygenerator,方便使用者自行實現自定義的自...

Hibernate 自定義主鍵

hibernate 自帶主鍵生成功能,當然也可以自定義生成主鍵 hibernate 自定義生成主鍵主要要實現 org.hibernate.id.identifiergenerator介面。之後便是書寫 public class usergenerator implements identifierg...