RSS| 首页| 山顶道| 布珞阁¹| GoodUI| 土产| 关于

java1.5以后的java.util.UUID 与 hibernate标识符生成器中uuid的不同
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值,不依赖于底层数据库的实现细节,因而可以适用于所有数据库。
使用uuid标识符生成器需要注意以下的问题:由于UUID的值是完全随机的,因此在数据库中,不能确定记录的顺序。另外,uuid标识符生成器使用32位16进制字符串,需要占用更多的空间,索引的效率也比较低。

通过测试,算出来值有2点

1. 只是32位hex代码,没有用-分隔

2. 基本上前面都是相同的,一眼就可以看出来

9481818622fad32b0122fad5961f0005
9481818622fad32b0122fad429bb0002
9481818622fad32b0122fad3ce320001

倒是可以拿来做组件,但是和C++写的程序共用数据库时,不一致的情况很麻烦,要处理-号分隔的问题

C++常用

{ABF4F706-D585-102C-8C4A-BDA3FB01135A}

 

还好,hibernate中还是提供了guid标识符生成器,需要底层数据库支持。mysql支持。

guid标识符生成器
  guid包含当前日期、时间、时钟序列和全局唯一的IEEE机器识别号等,在全局是唯一的。
  使用guid标识符生成器保存数据时,标识符生成器从数据库中获取guid作为对象标识符的值和记录的主键。使用guid需要底层数据库的支持。

20a1ba87-d586-102c-8c4a-bda3fb01135a
abf4f706-d585-102c-8c4a-bda3fb01135a
 

分类  日经| 暂无评论


垃圾太厉害了
说几句吧






*注意: 回复可能需要审查.您不必重复提交.