hibernate - 使用 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,但这个结果非常不随机。随机性是不可预料的吗?
解决方案
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/
能够帮助。
推荐阅读
- mongodb - MongoDB Stitch 和 Angular 6 应用程序
- java - oracle jdeveloper 12.2.1.3.0 上的 JAXWS 客户端 ServiceConfigurationError
- python - Python 从 Docker 容器内部获取 Docker 容器名称
- python - python从输出中提取几行
- math - 根据固定百分比和序列计算沿序列的总值
- windows - 在 Windows 中运行 Avahi Docker linux 容器
- html - 我制作了一个有 2 列的响应式网格,但高度不会在同一个位置结束,有一点差距
- javascript - 如何根据另一个复选框选择取消选中复选框?
- git - 我可以使用 GIT Bash 一次在我的所有 repos 上检查一个特定的分支吗?
- asp.net - 我应该使用视图模型吗?ASP.NET MVC