首页 > 解决方案 > 使用 uuid id 生成器的 Grails:不是很随机

问题描述

一个简单的 Grails 4 应用程序uuid在 Ubuntu 20.04 下使用带有 Hibernate 7.0.4 插件和 PostgreSQL 10 的 id 生成器。以下是创建 4 个实例后的一些输出:

=> select id,ttag,name from msg_template;
                id                | ttag |      name       
----------------------------------+------+-----------------
 ff808181781632030178163215190000 | publ | Notice01
 ff8081817816320301781632151f0001 | publ | Notice02
 ff808181781632030178163215230002 | publ | Signing01
 ff8081817816320301781635161b0003 | acme | Some thingy!

我的假设是 uuid = randomness,但这个结果非常不随机。随机性是不可预料的吗?

标签: hibernateuuidgrails-4

解决方案


UUID 有不同的版本和变体,请参阅https://en.wikipedia.org/wiki/Universally_unique_identifier。并非每个版本都会生成随机值。

但是,版本 4 基于随机数生成器生成随机值。

对于 Java,可以通过系统属性java.security.egd更精确地定义随机数生成器,请参阅https://www.baeldung.com/java-security-egd

使用java.util.UUID.randomUUID()可以生成版本 4 的 UUID。

对于 Hibernate,有不同的方式来使用 UUID,这里

能够帮助。


推荐阅读