java JPA 更短的UUID?

标签 java oracle hibernate jpa uuid

我的 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/

相关文章:

java - 如何插入到mysql的单列我有两个使用java的JCheckBox?

java - 在 Java 中创建迷宫求解算法

java - 我们可以使用 public static void main(String [] [] args) 吗?

Oracle:10g oracle 客户端是否可以与 11g 服务器一起使用?

SQL/Oracle 10g - 触发器问题

oracle - 记录最大日期

mysql - tomcat、hibernate、mysql连接问题

java.lang.ClassCastException : java. lang.Class 无法转换为 java.lang.reflect.ParameterizedType

java - 如何将 Google Appengine DateTime 与 Java 中的 Date 对象进行比较?

java - Spring MVC 和 JUnit : Failed to load ApplicationContext