2009.08.9 0:32 bruce:
java.util.UUID.randomUUID().toString(); 相当于其他语言(c++、c#)中的GUID概念,由机器算出不重复的128位值的hex代码组成,中间用-号隔开 <time_low> “-” <time_mid> “-” <time_high_and_version> “-” <variant_and_sequence> “-” <node> 字母基本没有规律 abf4f706-d585-102c-8c4a-bda3fb01135a 而hibernate中提供的集中标识符生成器中,也有个uuid,3.2以前版本分uuid.hex和uuid.string,后来去掉了uuid.string,建议用uuid uuid标识符生成器 uuid标识符生成器使用一个128位的全局唯一标识符(Universally Unique Identifier,UUID)算法生成字符串类型的标识符。UUID包含本机的IP地址、本机JVM的信息,相对于同一时空中的所有机器都是唯一的。uuid标识符生成器由Hibernate维护并生成uuid值,不依赖于底层数据库的实现细节,因而可以适用于所有数据库。 通过测试,算出来值有2点 1. 只是32位hex代码,没有用-分隔 2. 基本上前面都是相同的,一眼就可以看出来 9481818622fad32b0122fad5961f0005 倒是可以拿来做组件,但是和C++写的程序共用数据库时,不一致的情况很麻烦,要处理-号分隔的问题 C++常用 {ABF4F706-D585-102C-8C4A-BDA3FB01135A} 还好,hibernate中还是提供了guid标识符生成器,需要底层数据库支持。mysql支持。 guid标识符生成器 20a1ba87-d586-102c-8c4a-bda3fb01135a
使用uuid标识符生成器需要注意以下的问题:由于UUID的值是完全随机的,因此在数据库中,不能确定记录的顺序。另外,uuid标识符生成器使用32位16进制字符串,需要占用更多的空间,索引的效率也比较低。
9481818622fad32b0122fad429bb0002
9481818622fad32b0122fad3ce320001
guid包含当前日期、时间、时钟序列和全局唯一的IEEE机器识别号等,在全局是唯一的。
使用guid标识符生成器保存数据时,标识符生成器从数据库中获取guid作为对象标识符的值和记录的主键。使用guid需要底层数据库的支持。
abf4f706-d585-102c-8c4a-bda3fb01135a
