閱讀941 返回首頁    go 技術社區[雲棲]


第八章 ID主鍵生成策略

increment

(選查找數據庫中的主鍵生成,然後再把對象insert進去)

用於為long, short或者int類型生成 唯一標識。隻有在沒有其他進程往同一張表中插入數據時才能使用。 在集群下不要使用。

identity  

(主要用於mysql數據庫)

注:對於MySql數據庫使用遞增序列時需要在建表時對主鍵指定為auto_increment屬性。

對DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的內置標識字段提供支持。 返回的標識符是long, short 或者int類型的。 (數據庫自增)

sequence

(主要用於Oracle)

在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的標識符是long, short或者 int類型的。(數據庫自增)

hilo

使用一個高/低位算法高效的生成long, short 或者 int類型的標識符。給定一個表和字段(默認分別是 hibernate_unique_key和next_hi)作為高位值的來源。 高/低位算法生成的標識符隻在一個特定的數據庫中是唯一的。

seqhilo

使用一個高/低位算法來高效的生成long, short 或者 int類型的標識符,給定一個數據庫序列(sequence)的名字。

uuid (字符串)

用一個128-bit的UUID算法生成字符串類型的標識符, 這在一個網絡中是唯一的(使用了IP地址)。UUID被編碼為一個32位16進製數字的字符串,它的生成是由hibernate生成,一般不會重複。

UUID包含:IP地址,JVM的啟動時間(精確到1/4秒),係統時間和一個計數器值(在JVM中唯一)。 在Java代碼中不可能獲得MAC地址或者內存地址,所以這已經是我們在不使用JNI的前提下的能做的最好實現了

    String uuid = java.util.UUID.randomUUID().toString();

guid

在MS SQL Server 和 MySQL 中使用數據庫生成的GUID字符串。

native

跨數據庫時使用,由底層方言產生。

根據底層數據庫的能力選擇identity, sequence 或者hilo中的一個。(數據庫自增)

assigned

用戶自定義id;

讓應用程序在save()之前為對象分配一個標示符。這是 <generator>元素沒有指定時的默認生成策略。(如果是手動分配,則需要設置此配置)

select

通過數據庫觸發器選擇一些唯一主鍵的行並返回主鍵值來分配一個主鍵。

foreign

使用另外一個相關聯的對象的標識符。通常和<one-to-one>聯合起來使用。

 

     複合主鍵(聯合主鍵):多個字段構成唯一性。

最後更新:2017-04-03 18:52:03

  上一篇:go 用Android-X86和VirtualBox打造高性能Android開發環境
  下一篇:go C++實現全排列(調用next_permutation)