我正在使用我的uuid:
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;
但是我得到了一个聪明的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;
答案 0 :(得分:95)
应为uuid2
:
...
@GenericGenerator(name = "uuid", strategy = "uuid2")
...
答案 1 :(得分:16)
HibernateDoc表示您可以使用以下内容:
@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;
我希望您使用的是Hibernate 3.5。
答案 2 :(得分: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;
}
注意" uuid2"而不是" uuid"。
答案 3 :(得分:5)
正如@natan在评论中指出的那样,如果您使用的是Hibernate 5,则下面的代码就足够了:
@Id
@GeneratedValue
private java.util.UUID id;
在MySQL中用id
的类型定义BINARY(16)
列,或在其他SQL实现中将其等效。
答案 4 :(得分:3)
Unknown Id.generator:hibernate-uuid
{{1}}
答案 5 :(得分:2)
这将使用UUID v4,并且自动生成的uuid将像往常一样varchar(36)
存储在该列中:
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(length = 36)
private String uuid;
这应该会对性能产生一些影响:
BINARY(16)
java.lang.String
实例比java.util.UUID
消耗更多的内存:UUID以字符串的形式存储112字节,而以UUID
的形式存储32字节(即两个long + obj标头)。但是使用带字符串的UUID更容易-编写查询更容易,并且您可以看到表的内容。
在Hibernate 5.3上测试
答案 6 :(得分:0)
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "UUID_ID")
public String getId(){
return id;
}
这是在Hibernate 5.0.11.FINAL中为uuid生成器使用注释的正确方法。
注意: IT已弃用。
答案 7 :(得分:0)
在当前的5.4.2 Hibernate版本中,
如果您想要数据库表中的人类可读 varchar(36)字段,
也是Java类中的 Serializable UUID 数据类型,
您可以同时使用@Type(type = "uuid-char")
,您用java.util.UUID
类型声明字段成员。
请注意,@Column(length = 36)
对于将MySQL中的字段长度从255减少到36非常重要。
请注意,在PostgreSQL中,您应该改用@Type(type = "pg-uuid")
。
import org.hibernate.annotations.Type
import java.util.UUID
import javax.persistence.Column
import javax.persistence.GeneratedValue
import javax.persistence.Id
@Id @GeneratedValue
@Type(type = "uuid-char") @Column(length = 36)
private UUID id;