Mar*_*tin 69 java uuid annotations hibernate
我正在使用我的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)
axt*_*avt 101
它应该是uuid2
:
...
@GenericGenerator(name = "uuid", strategy = "uuid2")
...
Run Code Online (Sandbox Code Playgroud)
CSc*_*ulz 16
HibernateDoc说你可以使用以下内容:
@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;
Run Code Online (Sandbox Code Playgroud)
我希望你使用的是Hibernate 3.5.
ker*_*vin 11
尝试...
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "uuid", columnDefinition = "BINARY(16)")
public UUID getId()
{
return id;
}
public void setId(UUID i)
{
id = i;
}
Run Code Online (Sandbox Code Playgroud)
注意"uuid2"而不是"uuid".
正如@natan在评论中指出的那样,如果您使用的是Hibernate 5,那么下面的代码就足够了:
@Id
@GeneratedValue
private java.util.UUID id;
Run Code Online (Sandbox Code Playgroud)
在MySQL中定义id
列的类型,BINARY(16)
或者在其他SQL实现中等效。
这将使用 UUID v4 并且自动生成的 uuid 将像往常一样存储在列中varchar(36)
:
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(length = 36)
private String uuid;
Run Code Online (Sandbox Code Playgroud)
这应该会对性能产生一些影响:
BINARY(16)
java.lang.String
实例消耗的内存多于java.util.UUID
:UUID 作为字符串为 112 字节,而UUID
.但使用字符串 UUID 更容易 - 更容易编写查询,并且您可以看到表的内容。
在 Hibernate 5.3 上测试
归档时间: |
|
查看次数: |
82042 次 |
最近记录: |