使用Java自带uuid生成主键,出现违反主键的问题

发布于 2022-05-26 16:59:37 字数 290 浏览 795 评论 10

// 代码如下,偶发性的,是否试下面的截取逻辑还有问题.
public static String getUUID() {
    UUID uuid = UUID.randomUUID();
    String str = uuid.toString();
    // 去掉"-"符号
    return str.substring(0, 8) + str.substring(9, 13) + str.substring(14, 18) + str.substring(19, 23) + str.substring(24);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

伴梦长久 2022-05-28 05:30:15

把-替换成其他字符,-直接去掉可能出现重复

淡紫姑娘! 2022-05-28 05:30:06

使用replaceAll去除-就不会出现了

后eg是否自 2022-05-28 05:30:04

楼主这个代码逻辑应该是没问题的,去掉中线用substring无不可。按通常的uuid生成规则0-8位是时间戳,后面则是当前主机mac地址,再作哈希运算,重复的机会非常低。但短时间内生成还是有重复可能性。

全世界 主流的uuid生成有五种,第一二种比较多,而java的uuid生成应该是1,2种。如果只是单纯第一种有一定重复的机会

  • 1, date-time & MAC address
  • 2, date-time & group/user id
  • 3, MD5 hash & namespace
  • 4, pseudo-random number
  • 5, SHA-1 hash & namespace
宁愿没拥抱 2022-05-28 05:29:44

如果你还重复就用随机吧~

final byte[] randomBytes = new byte[16];
ThreadLocalRandom.current().nextBytes(randomBytes);
UUID uuid = UUID.nameUUIDFromBytes(randomBytes);
System.out.println(uuid.toString().replace("-",""));

 

若水微香 2022-05-28 05:24:18

单机情况下除非你时钟回拨了
去除"-"为什么不用replace....

濫情▎り 2022-05-28 05:21:25

UUID重复没见过,不行试试雪花算法

风渺 2022-05-28 05:03:42

单机情况下是不可能出现的,多机情况下,有可能出现

眼眸 2022-05-28 05:01:02

建议题主去除短横线使用字符串函数replaceAll("-", "")

无言温柔 2022-05-27 19:49:14

一般情况UUID是不会重复的,UUID为机器唯一识别码和随机时间组成,多机情况是绝对不会重复的,单机部署多个相同的项目在调整了时间的情况下可能有极小的概率重复。

少女七分熟 2022-05-27 09:02:09

换个角度想想,是否自己的代码中有重试动作,导致相同对象重复在保存,而引起主键重复问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文