【发布时间】:2016-02-19 17:23:33
【问题描述】:
我的 java JPA Entity 使用下面的代码来生成它的 UUID
@Entity
public class Myclass {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
String id;
String name;
}
在 Oracle 和 java 中作为字符串,ID 最终是这样的:
2c96cc2a52f9f9a90152fa6549f40008
32 位十六进制字符串。
我必须与一些需要将我的 ID 保存在不同位置的第三方系统进行交互,并且它必须是相同的。不幸的是,他们的字段只允许 30 个字符的字符串(任何字符,不仅是十六进制)。
所以我需要我的 uuid 看起来像一个 30 个字符或更少的字符串,无论它出现在哪里(在 oracle、java、第三方系统等)。
我应该怎么做才能使该 uuid 的表示使用所有字母数字字符('ghi...z' 但没有奇怪的字符)更短,以及如何确保该表示在数据库中可见并且在应用中?
非常感谢
【问题讨论】:
-
定义“任何字符”。事实上,定义“char”。您的第三方将什么定义为“字符”?
-
我的意思是我可以让我的 ID 使用任何字母数字字符:0-9a-z,而不是像现在这样只使用十六进制字符。
-
UUID 并不总是保证是唯一的。
-
@Tiny 我认为 OP 并不真正关心这一点(在现实生活中,两个相同的 UUID 无论如何都非常罕见); OP 对在他的 UUID 和第三方需求之间获得双射的方法更感兴趣。至少我是这么理解的。
标签: java oracle hibernate jpa uuid