Hibernate UUID生成器(重复生成)

时间:2013-07-31 01:49:02

标签: java hibernate uuid

我有一个系统分析师坚持使用oracle序列而不是UUID,因为他不熟悉它。

我有几个问题,希望社区可以帮助我。

1)如何生成hibernate UUID以确保唯一性?

我知道oracle SYS_GUID()使用

  

SYS_GUID生成并返回全局唯一标识符(RAW   值)由16个字节组成。在大多数平台上,生成了   标识符由主机标识符,进程或线程组成   调用该函数的进程或线程的标识符,以及   该进程或线程的非重复值(字节序列)

2)在使用UUID的情况下,hibernate会自动重新生成UUID以提交行吗?

我知道这种情况很少见,但如果hibernate可以做到这一点,但他坚持认为有可能会发生并且交易会失败。

3)使用UUID而不是oracle序列生成器有什么好处?

1 个答案:

答案 0 :(得分:2)

罕见甚至没有开始描述两次随机生成相同UUID的远程可能性。

如维基百科关于UUID s

的论文所示

n次尝试后发生冲突的可能性。

n                               probability
68,719,476,736 = 2**36          0.0000000000000004 (4 × 10−16)
2,199,023,255,552 = 2**41       0.0000000000004 (4 × 10−13)
70,368,744,177,664 = 2**46      0.0000000004 (4 × 10−10)

您可以以每秒100万的速度生成UUID,持续814天,并且只有4 * 10 ** - 10的机会生成副本。

更不用说Advantages and disadvantages of GUID / UUID database keys