Hibernate 的 UUID 生成规则和 IP 解析

Hibernate 的 UUID 生成规则

生成规则概述:IP 地址,JVM 的启动时间(精确到 1/4 秒),系统时间和一个计数器值(在 JVM 中唯一)。
image.png

生成规则分段说明: GID 共 32 个字符,IP 占 8 个字符,JVM 的启动时间占 8 个字符,系统时间占 12 个字符 (高位时间 2 个字符,低位 10 个字符),计数器占 4 个字符

示例:4028d5816fb34d57016fb355b0a20055 ,其中:4028d581 根据系统 IP 生成,6fb34d57 根据 JVM 的启动时间生成,016fb355b0a2 根据系统当前时间生成,0055 根据 static short 计数器生成

UUID 和 IP

Mestar 平台使用 hibernate 作为 ORM 组件,所有数据的 GID 都是在 Hibernate 中生成的。由此,对于数据库的任意一条数据,根据 GID 的前 8 个字符,可以知道这条记录是哪个服务创建的。

getIp() 方法说明

image.png
见 org\hibernate\id\AbstractUUIDGenerator.class

image.png
见 org\hibernate\util\BytesHelper.class

反向操作实现

根据 toInt 方法的实现,做反向位移操作
image.png

使用示例

image.png

完整代码见附件

IpUuidUtil.java