2013-07-31 148 views
-1

我有一个系统分析师坚持使用oracle序列而不是UUID,因为他不熟悉它。休眠UUID生成器(重新生成重复)

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

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

我知道预言SYS_GUID()使用

SYS_GUID生成并返回一个全局唯一标识符(RAW 值)构成的16个字节。在大多数平台,所生成的 标识符由一个主机标识符,进程或线程 标识符的过程或线程调用该函数,和一个 非重复的值(字节顺序),用于该进程或线程

的2)在使用UUID的情况下,休眠自动重新生成一个UUID来提交该行?

我知道这种情况很少发生,但是如果hibernate可以做到这一点,但他坚持有可能会发生并且事务将会失败。

3)在oracle序列发生器上使用UUID有什么好处?

+0

我之所以得到 - 点的任何理由? – seesee

+0

Hibernate的UUID看起来是128字节,这是不太可能重新生成相同值的次数,但为什么要讨论呢?如果你这样做,你不会错。 – EJP

+0

权威是一种痛苦,他坚持1万亿次仍然是一个机会。 – seesee

回答

2

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

如维基百科arcticle约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万的速度每秒814天生成UUID,只有有一个4 * 10 ** - 产生重复的10机会。

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