我的 java JPA 实体使用以下代码生成其 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”但没有奇怪的字符)更短以及如何确保该表示在数据库中可见并且在应用程序中?
非常感谢
最佳答案
如果您愿意处理一些看起来很奇怪的键,请使用高于 16 的基数对 UUID 进行编码,例如 Base36(所有字母和数字,可以不区分大小写)或 Base64(通常不是 URL-安全的)。如果您想要尽可能紧凑的 URL 安全的内容,您可以使用 my implementation of Flickr-compatible Base58 ,它具有用于编码和解码 UUID 对象的特定帮助程序。
关于java JPA 更短的UUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35511155/