UUID作为实体ID

时间:2015-02-06 05:30:13

标签: mysql hibernate

我在我的java应用程序中使用hibernate + mysql,当我在表中插入一个条目时,我想生成一个唯一的字符串id(UUID)。

如何创建表格以便我可以自动生成uuid并将其用作实体键?

+------------+-------------------------------------+
| uuid       | name                                |
+------------+-------------------------------------+
| asdf1221   | name 1                              |
| sksdkfk1   | name 2                              |
+------------+-------------------------------------+

2 个答案:

答案 0 :(得分:1)

MySQL不允许使用函数提供默认值,但请参见Can I use a function for a default value in MySql?,以了解如何创建触发器来实现此功能。

请注意,MySQL的UUID()返回一个CHAR(36),并且将UUID作为文本存储(如这些答案所示)显然是无效的。相反,该列应为BINARY(16),并且在插入数据时可以使用UUID_TO_BIN(),而在读回数据时可以使用BIN_TO_UUID()

答案 1 :(得分:0)

我建议您使用Java生成uuid。

  1. Java UUID.randomUuid()是类型4,该类型在密码上很强;而MySQL uuid()的类型1是基于时间的,并且相对容易预测。

如果您担心安全性,请使用Java进行。

  1. 正如Stephen提到的,将uuid存储在数据库中时,binary(16)效率更高。

Hibernate从数据库二进制(16)与Java UUID之间协调提供了本地支持。只需在Java实体中将字段类型设置为UUID,列定义为Binary(16)。