我一直在寻找一种简单的 Java算法来生成伪随机字母数字字符串.在我的情况下,它将被用作一个唯一的会话/密钥标识符,它"很可能"在500K+生成过程中是唯一的(我的需求实际上并不需要更复杂的东西).
理想情况下,我可以根据我的唯一性需求指定长度.例如,生成的长度为12的字符串可能看起来像"AEYGF7K0DM1X".
我曾经在许多数据库系统上工作,如果所有数据库密钥都是GUID/UUID值,那么在数据库之间移动条目会变得更容易.我曾经考虑过几次走这条路,但总会有一些不确定性,特别是在性能和未读出电话的URL方面.
有没有人在数据库中广泛使用GUID?通过这种方式我可以获得哪些优势,以及可能存在的陷阱是什么?
我正在使用我的uuid如下:
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;
Run Code Online (Sandbox Code Playgroud)
但我得到了一个聪明的Hibernate警告:
使用org.hibernate.id.UUIDHexGenerator,它不生成符合IETF RFC 4122的UUID值; 考虑使用org.hibernate.id.UUIDGenerator
所以我想切换到org.hibernate.id.UUIDGenerator,现在我的问题是如何告诉Hibernate的生成器.我看到有人把它用作"hibernate-uuid" - 所以这就是我尝试过的,但结果是否定的:
@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "hibernate-uuid", strategy = "hibernate-uuid")
@Column(name = "uuid", unique = true)
private String uuid;
Run Code Online (Sandbox Code Playgroud) java ×2
uuid ×2
alphanumeric ×1
annotations ×1
database ×1
guid ×1
hibernate ×1
random ×1
string ×1