如何解决使用 uuid id 生成器的 Grails:不是很随机
一个简单的 Grails 4 应用程序在 Ubuntu 20.04 下使用带有 Hibernate 7.0.4 插件和 Postgresql 10 的 uuid
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 = 随机性,但这个结果非常不随机。随机性不是意料之中的吗?
解决方法
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 的方法,在这里
- https://thorben-janssen.com/generate-uuids-primary-keys-hibernate/
- https://vladmihalcea.com/hibernate-and-uuid-identifiers/
可以提供帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。