做群集时,Hibernate 产生主键的问题?
我们现在的Hibernate产生主键是increment,以前在一台机器上跑应用没有问题!
现在我们需要做群集,好像再用increment产生主键时候就会像一个数据库上,跑多个应用时,会产生重复主键,请问有相关经验的兄弟说说看怎么解决这个问题.谢谢!
------解决方案--------------------用数据库方的方法产生id,例如oracle的sequence对象,肯定不会重复
------解决方案--------------------用GUID生成,不要Hibernate自己生成
------解决方案--------------------用uuid.hex看行不行
------解决方案--------------------uuid.hex生成主键是32位
------解决方案--------------------如果使用Guid,你的数据库设计要改
/////
GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。
UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID
import java.util.UUID;
public class Test {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println (uuid);
}
}
编译运行输出:07ca3dec-b674-41d0-af9e-9c37583b08bb
------解决方案--------------------uuid,对,会根据及其的marc地址和当时的时间生成全球唯一的id,128位