UUID是指在一臺機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。通常平臺會提供生成UUID的API。UUID按照開放軟件基金會 (OSF)制定的標準計算,用到了以太網卡地址、納秒級時間、芯片ID碼和許多可能的數字。由以下幾部分的組合:當前日期和時間(UUID的第一個部分與時間有關,如果你在生成一個UUID之后,過幾秒又生成一個UUID,則第一個部分不同,其余相同),時鐘序列,全局唯一的IEEE機器識別號(如果有網卡,從網卡獲得,沒有網卡以其他方式獲得),UUID的唯一缺陷在于生成的結果串會比較長。關于UUID這個標準使用最普遍的是微軟的GUID (Globals Unique Identifiers)。

UUID 在所有計算機上都是唯一的。不過,它們的值是完全隨機的,因此不能用來確定添加值的時間或值的順序。另外,UUID 值比其它方法(包括全局自動增量)所需的值大得多,并且在主鍵表和外鍵表中都需要更多的表空間。使用 UUID 建立表索引的效率也更低。

標準的UUID格式為:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)

import java.util.UUID; 
  
public class TestUUID 
  
    
public static void main(String[] args) 
        
// TODO Auto-generated method stub 
        for (int i = 0; i < 10; i ++
            System.out.println(UUID.randomUUID().toString()); 
        }
 
    }
 
  
}



輸出如下結果:

 12bc58ecd-dd48-4144-b5aa-2ebebaad300c
 2468a36ed-2eec-42fc-9524-d04a404a5d94
 3e43ea34d-3768-4ad0-8f28-dd8e61267103
 4dba317d5-688e-4656-bea5-4542b414481d
 5f40408bb-df92-4118-8265-1e83f2810ae2
 6386e7c9d-b2af-4787-a171-6b1d9f350193
 777a2eb19-0541-4fc3-a014-1b70840c42ec
 84a00304e-d7e7-4a6f-bef3-4fb40ed7e1c2
 9631fdb01-1505-44e9-9e1b-3d84083651da
10bdb68883-ff9b-4b56-a825-940f45b3b3db

Hibernate中的使用


UUID algorithm
The UUID contains: IP address, startup time of the JVM (accurate to a quarter second), system time and a
counter value (unique within the JVM). It’s not possible to obtain a MAC address or memory address from Java
code, so this is the best we can do without using JNI.

<class name="eg.Person" table="person"> 
    
<id name="Key" column="pid" type="string"> 
        
<generator class="uuid" /> 
    
</id> 
    
<property name="birthday" type="date" /> 
    
<component name="Name" class="eg.Name"><!-- class attribute optional --> 
        
<property name="initial" /> 
        
<property name="first" /> 
        
<property name="last" /> 
    
</component> 
</class>